diff options
author | Hans de Goede <hdegoede@redhat.com> | 2016-04-12 12:27:09 +0200 |
---|---|---|
committer | Ben Hutchings <ben@decadent.org.uk> | 2016-06-15 21:28:11 +0100 |
commit | 720c21a8806e7e2ccbb9755880d7ee4c4ef60569 (patch) | |
tree | 800f84d55fbcdc0e043215fd6c7e71c165b543ee | |
parent | 1972444b707d53dda2b5cf32bfc955b11cd0a529 (diff) | |
download | linux-stable-720c21a8806e7e2ccbb9755880d7ee4c4ef60569.tar.gz linux-stable-720c21a8806e7e2ccbb9755880d7ee4c4ef60569.tar.bz2 linux-stable-720c21a8806e7e2ccbb9755880d7ee4c4ef60569.zip |
USB: uas: Add a new NO_REPORT_LUNS quirk
commit 1363074667a6b7d0507527742ccd7bbed5e3ceaa upstream.
Add a new NO_REPORT_LUNS quirk and set it for Seagate drives with
an usb-id of: 0bc2:331a, as these will fail to respond to a
REPORT_LUNS command.
Reported-and-tested-by: David Webb <djw@noc.ac.uk>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[bwh: Backported to 3.2:
- Adjust context
- Drop the UAS changes]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
-rw-r--r-- | Documentation/kernel-parameters.txt | 2 | ||||
-rw-r--r-- | drivers/usb/storage/usb.c | 5 | ||||
-rw-r--r-- | include/linux/usb_usual.h | 2 |
3 files changed, 8 insertions, 1 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index f0001eb33173..ac601c4b9f57 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -2699,6 +2699,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted. sector if the number is odd); i = IGNORE_DEVICE (don't bind to this device); + j = NO_REPORT_LUNS (don't use report luns + command, uas only); l = NOT_LOCKABLE (don't try to lock and unlock ejectable media); m = MAX_SECTORS_64 (don't transfer more diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c index d582af4a1968..d2817421fc55 100644 --- a/drivers/usb/storage/usb.c +++ b/drivers/usb/storage/usb.c @@ -453,7 +453,7 @@ static void adjust_quirks(struct us_data *us) US_FL_CAPACITY_OK | US_FL_IGNORE_RESIDUE | US_FL_SINGLE_LUN | US_FL_NO_WP_DETECT | US_FL_NO_READ_DISC_INFO | US_FL_NO_READ_CAPACITY_16 | - US_FL_INITIAL_READ10); + US_FL_INITIAL_READ10 | US_FL_NO_REPORT_LUNS); p = quirks; while (*p) { @@ -497,6 +497,9 @@ static void adjust_quirks(struct us_data *us) case 'i': f |= US_FL_IGNORE_DEVICE; break; + case 'j': + f |= US_FL_NO_REPORT_LUNS; + break; case 'l': f |= US_FL_NOT_LOCKABLE; break; diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h index 88413e9d80b5..a3d6fac653cd 100644 --- a/include/linux/usb_usual.h +++ b/include/linux/usb_usual.h @@ -67,6 +67,8 @@ /* Initial READ(10) (and others) must be retried */ \ US_FLAG(BROKEN_FUA, 0x01000000) \ /* Cannot handle FUA in WRITE or READ CDBs */ \ + US_FLAG(NO_REPORT_LUNS, 0x10000000) \ + /* Cannot handle REPORT_LUNS */ \ #define US_FLAG(name, value) US_FL_##name = value , enum { US_DO_ALL_FLAGS }; |