linux/drivers/usb/storage
Mark Knibbs 646a384317 storage: Fix bus scan and multi-LUN support for SCM eUSCSI devices
This patch does two things for SCM eUSCSI USB-SCSI converters:

1. SCM eUSCSI bridge devices are hard-wired to use SCSI ID 7. On connecting
the converter, access to that ID is attempted during the bus scan. Asking
the converter to issue INQUIRY commands to itself isn't very polite and
wastes time. Set this_id to 7 so __scsi_scan_target() skips it in the scan.

2. Enable multi-LUN support. eUSCSI devices don't support Get Max LUN
requests, returning an error (-32). [Different targets could have different
numbers of LUNs, so it wouldn't make sense to return a particular value in
response to Get Max LUN.]

usb_stor_scan_dwork() does this:
    /* For bulk-only devices, determine the max LUN value */
    if (us->protocol == USB_PR_BULK && !(us->fflags & US_FL_SINGLE_LUN)) {
            mutex_lock(&us->dev_mutex);
            us->max_lun = usb_stor_Bulk_max_lun(us);
            mutex_unlock(&us->dev_mutex);

It avoids calling usb_stor_Bulk_max_lun() if US_FL_SINGLE_LUN, but not for
US_FL_SCM_MULT_TARG. Since usb_stor_Bulk_max_lun() returns 0 in the error
case, us->max_lun was always set to 0.

[If the user doesn't want multi-LUN support (perhaps there are SCSI devices
which respond to commands on all LUNs?), the US_FL_SINGLE_LUN quirk can be
specified on the kernel command line.]

Signed-off-by: Mark Knibbs <markk@clara.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2014-11-24 17:22:38 -08:00
..
alauda.c USB: storage: use %*ph specifier to dump small buffers 2014-09-23 22:15:18 -07:00
cypress_atacb.c usb-storage: CY7C68300A chips do not support Cypress ATACB 2013-04-23 10:08:13 -07:00
datafab.c
debug.c usb: storage: Convert usb_stor_dbg to return void 2014-11-03 15:38:17 -08:00
debug.h usb: storage: Convert usb_stor_dbg to return void 2014-11-03 15:38:17 -08:00
ene_ub6250.c staging: keucr: remove driver 2014-07-23 19:01:36 -07:00
freecom.c
initializers.c storage: Enable multi-target mode as vendor driver does for SCM eUSCSI bridge 2014-11-24 17:22:38 -08:00
initializers.h
isd200.c
jumpshot.c
karma.c
Kconfig SCSI misc on 20140806 2014-08-06 20:10:32 -07:00
Makefile
onetouch.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
option_ms.c
option_ms.h
protocol.c USB: storage: fix compile warning 2013-12-09 23:45:39 -08:00
protocol.h
realtek_cr.c usb: storage: fix build warnings !CONFIG_PM 2014-11-03 15:26:16 -08:00
scsiglue.c usb: Fixed a few typos 2014-09-23 22:15:18 -07:00
scsiglue.h
sddr09.c USB: storage: use %*ph specifier to dump small buffers 2014-09-23 22:15:18 -07:00
sddr55.c
shuttle_usbat.c usb: storage: shuttle_usbat: fix discs being detected twice 2014-05-03 18:04:28 -04:00
sierra_ms.c
sierra_ms.h
transport.c Merge 3.18-rc4 into usb-next. 2014-11-10 12:10:24 +09:00
transport.h
uas-detect.h uas: Add missing le16_to_cpu calls to asm1051 / asm1053 usb-id check 2014-09-11 14:21:43 -07:00
uas.c uas: Make uas work with blk-mq 2014-11-03 15:34:00 -08:00
unusual_alauda.h
unusual_cypress.h usb-storage: restrict bcdDevice range for Super Top in Cypress ATACB 2014-02-04 12:59:14 -08:00
unusual_datafab.h
unusual_devs.h storage: Add quirk for another SCM-based USB-SCSI converter 2014-09-23 22:29:27 -07:00
unusual_ene_ub6250.h
unusual_freecom.h
unusual_isd200.h
unusual_jumpshot.h
unusual_karma.h
unusual_onetouch.h
unusual_realtek.h
unusual_sddr09.h
unusual_sddr55.h
unusual_uas.h uas: Add US_FL_NO_ATA_1X quirk for 2 more Seagate models 2014-11-03 15:48:45 -08:00
unusual_usbat.h
usb.c storage: Fix bus scan and multi-LUN support for SCM eUSCSI devices 2014-11-24 17:22:38 -08:00
usb.h usb-storage: Modify and export adjust_quirks so that it can be used by uas 2014-03-04 15:38:17 -08:00
usual-tables.c