linux/drivers/usb/storage
Alan Stern 6a0bdffa00 SCSI & usb-storage: add try_rc_10_first flag
Several bug reports have been received recently for USB mass-storage
devices that don't handle READ CAPACITY(16) commands properly.  They
report bogus sizes, in some cases becoming unusable as a result.

The bugs were triggered by commit
09b6b51b0b (SCSI & usb-storage: add
flags for VPD pages and REPORT LUNS), which caused usb-storage to stop
overriding the SCSI level reported by devices.  By default, the sd
driver will try READ CAPACITY(16) first for any device whose level is
above SCSI_SPC_2.

It seems likely that any device large enough to require the use of
READ CAPACITY(16) (i.e., 2 TB or more) would be able to handle READ
CAPACITY(10) commands properly.  Indeed, I don't know of any devices
that don't handle READ CAPACITY(10) properly.

Therefore this patch (as1559) adds a new flag telling the sd driver
to try READ CAPACITY(10) before READ CAPACITY(16), and sets this flag
for every USB mass-storage device.  If a device really is larger than
2 TB, sd will fall back to READ CAPACITY(16) just as it used to.

This fixes Bugzilla #43391.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Acked-by: Hans de Goede <hdegoede@redhat.com>
CC: "James E.J. Bottomley" <JBottomley@parallels.com>
CC: Matthew Dharm <mdharm-usb@one-eyed-alien.net>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2012-06-22 22:05:31 -07:00
..
alauda.c usb: Disable dynamic id of USB storage subdrivers 2012-01-24 14:31:03 -08:00
cypress_atacb.c usb: Disable dynamic id of USB storage subdrivers 2012-01-24 14:31:03 -08:00
datafab.c usb: Disable dynamic id of USB storage subdrivers 2012-01-24 14:31:03 -08:00
debug.c
debug.h
ene_ub6250.c usb/storage/ene_ub6250: Remove redundant NULL check before release_firmware() and pointless assignment 2012-04-18 13:52:35 -07:00
freecom.c usb: Disable dynamic id of USB storage subdrivers 2012-01-24 14:31:03 -08:00
initializers.c
initializers.h
isd200.c usb: Disable dynamic id of USB storage subdrivers 2012-01-24 14:31:03 -08:00
jumpshot.c usb: Disable dynamic id of USB storage subdrivers 2012-01-24 14:31:03 -08:00
karma.c usb: Disable dynamic id of USB storage subdrivers 2012-01-24 14:31:03 -08:00
Kconfig Documentation: remove references to /etc/modprobe.conf 2012-03-30 16:03:15 -07:00
libusual.c
Makefile Merge branch 'staging-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6 2011-03-16 15:19:35 -07:00
onetouch.c usb: Disable dynamic id of USB storage subdrivers 2012-01-24 14:31:03 -08:00
option_ms.c usb: Add module.h to drivers/usb consumers who really use it. 2011-10-31 19:31:25 -04:00
option_ms.h
protocol.c usb-storage: Accept 8020i-protocol commands longer than 12 bytes 2011-11-14 17:05:03 -08:00
protocol.h
realtek_cr.c usb/storage: redefine US_BULK_FLAG_IN and use it 2012-02-28 11:07:42 -08:00
scsiglue.c SCSI & usb-storage: add try_rc_10_first flag 2012-06-22 22:05:31 -07:00
scsiglue.h
sddr09.c usb: Disable dynamic id of USB storage subdrivers 2012-01-24 14:31:03 -08:00
sddr55.c usb: Disable dynamic id of USB storage subdrivers 2012-01-24 14:31:03 -08:00
shuttle_usbat.c usb: Disable dynamic id of USB storage subdrivers 2012-01-24 14:31:03 -08:00
sierra_ms.c usb: Add module.h to drivers/usb consumers who really use it. 2011-10-31 19:31:25 -04:00
sierra_ms.h
transport.c usb/storage: redefine US_BULK_FLAG_IN and use it 2012-02-28 11:07:42 -08:00
transport.h usb/storage: a couple defines from drivers/usb/storage/transport.h to include/linux/usb/storage.h 2012-02-28 11:05:18 -08:00
uas.c usb/uas: make sure data urb is gone if we receive status before that 2012-02-02 14:51:30 -08:00
unusual_alauda.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
unusual_cypress.h USB: usb-storage: unusual_devs update for Cypress ATACB 2011-01-22 18:31:26 -08:00
unusual_datafab.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
unusual_devs.h usb-storage: Add 090c:1000 to unusal-devs 2012-06-13 16:29:58 -07:00
unusual_ene_ub6250.h Staging: Merge ENE UB6250 SD card codes from keucr to drivers/usb/storage 2011-03-07 13:40:59 -08:00
unusual_freecom.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
unusual_isd200.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
unusual_jumpshot.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
unusual_karma.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
unusual_onetouch.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
unusual_realtek.h usb-storage: fix up the unusual_realtek device list 2011-05-17 11:56:28 -07:00
unusual_sddr09.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
unusual_sddr55.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
unusual_usbat.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
usb.c USB: storage: fixed keyword related space issues. 2012-05-17 09:48:29 -07:00
usb.h usb-storage: fix freezing of the scanning thread 2012-02-21 16:29:15 -08:00
usual-tables.c Merge branch 'staging-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6 2011-03-16 15:19:35 -07:00