On Mon, 19 Dec 2005, Greg KH wrote:

Should it make it into the final 2.6.15 release?  If so, care to send it
to me?

Hello Greg,

a copy of the patch is below.


- Paul



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 <[EMAIL PROTECTED]> collaborated in the development of this
patch.

Signed-off-by: Paul Walmsley <[EMAIL PROTECTED]>


- Paul

diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
index 4837524..4ef5527 100644
--- a/drivers/usb/storage/scsiglue.c
+++ b/drivers/usb/storage/scsiglue.c
@@ -109,7 +109,7 @@ static int slave_configure(struct scsi_d
         * data comes from.
         */
        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,
         * devices using their chips have problems transferring more than
@@ -162,7 +162,7 @@ static int slave_configure(struct scsi_d
                 * a Get-Max-LUN request, we won't lose much by setting the
                 * revision level down to 2.  The only devices that would be
                 * 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
                 * Hardware Error) when any low-level error occurs,


From [EMAIL PROTECTED] Tue Nov 29 19:20:38 2005
Date: Tue, 29 Nov 2005 19:20:38 -0700 (MST)
From: Paul Walmsley <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED], linux-kernel@vger.kernel.org, 
linux-usb-devel@lists.sourceforge.net
Subject: [PATCH] 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 <[EMAIL PROTECTED]> collaborated in the development of this
patch.

Signed-off-by: Paul Walmsley <[EMAIL PROTECTED]>


- Paul

diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
index 4837524..4ef5527 100644
--- a/drivers/usb/storage/scsiglue.c
+++ b/drivers/usb/storage/scsiglue.c
@@ -109,7 +109,7 @@ static int slave_configure(struct scsi_d
         * data comes from.
         */
        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,
         * devices using their chips have problems transferring more than
@@ -162,7 +162,7 @@ static int slave_configure(struct scsi_d
                 * a Get-Max-LUN request, we won't lose much by setting the
                 * revision level down to 2.  The only devices that would be
                 * 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
                 * Hardware Error) when any low-level error occurs,



Reply via email to