Commit 28120be5 authored by Paul Walmsley's avatar Paul Walmsley Committed by Linus Torvalds

[PATCH] USB Storage: Force starget->scsi_level in usb-storage scsiglue.c

When the usb-storage module forces sdev->scsi_level to SCSI_2, it should
also force starget->scsi_level to the same value.  Otherwise, the SCSI
layer may attempt to issue SCSI-3 commands to the device, such as REPORT
LUNS, which it cannot handle.  This can prevent the device from working
with Linux.

The AMS Venus DS3 DS2316SU2S SATA-to-SATA+USB enclosure, based on the
Oxford Semiconductor OXU921S chip, requires this patch to function
correctly on Linux.  The enclosure reports a SCSI-3 SPC-2 command set
level, but does not correctly handle the REPORT LUNS SCSI command -
probably due to a bug in its firmware.

It seems likely that other USB storage enclosures with similar bugs will
also benefit from this patch.

Tony Lindgren <tony@atomide.com> collaborated in the development of this
patch.
Signed-off-by: default avatarPaul Walmsley <paul@booyaka.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 23f9b317
...@@ -109,7 +109,7 @@ static int slave_configure(struct scsi_device *sdev) ...@@ -109,7 +109,7 @@ static int slave_configure(struct scsi_device *sdev)
* data comes from. * data comes from.
*/ */
if (sdev->scsi_level < SCSI_2) if (sdev->scsi_level < SCSI_2)
sdev->scsi_level = SCSI_2; sdev->scsi_level = sdev->sdev_target->scsi_level = SCSI_2;
/* According to the technical support people at Genesys Logic, /* According to the technical support people at Genesys Logic,
* devices using their chips have problems transferring more than * devices using their chips have problems transferring more than
...@@ -162,7 +162,7 @@ static int slave_configure(struct scsi_device *sdev) ...@@ -162,7 +162,7 @@ static int slave_configure(struct scsi_device *sdev)
* a Get-Max-LUN request, we won't lose much by setting the * a Get-Max-LUN request, we won't lose much by setting the
* revision level down to 2. The only devices that would be * revision level down to 2. The only devices that would be
* affected are those with sparse LUNs. */ * affected are those with sparse LUNs. */
sdev->scsi_level = SCSI_2; sdev->scsi_level = sdev->sdev_target->scsi_level = SCSI_2;
/* USB-IDE bridges tend to report SK = 0x04 (Non-recoverable /* USB-IDE bridges tend to report SK = 0x04 (Non-recoverable
* Hardware Error) when any low-level error occurs, * Hardware Error) when any low-level error occurs,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment