tree c09328dade56919dbcd838ed5bc51143a04ce67a
parent 2a40342e0e72a2ba89aaa9e6c9a9eceb04741b24
author James Bottomley <[EMAIL PROTECTED]> Sat, 02 Jul 2005 20:22:01 -0400
committer James Bottomley <[EMAIL PROTECTED](none)> Tue, 12 Jul 2005 03:04:43 
-0500

[SCSI] SPI transport class, don't negotiate options not supported

At the moment, the transport class blindly tries to set things like
QAS and IU, even if the drive won't support them.  It's best not to
annoy the devices like this and instead only set what the drive says
is actually supported.

Signed-off-by: James Bottomley <[EMAIL PROTECTED]>

 drivers/scsi/scsi_transport_spi.c |   13 ++++++++-----
 1 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/scsi_transport_spi.c 
b/drivers/scsi/scsi_transport_spi.c
--- a/drivers/scsi/scsi_transport_spi.c
+++ b/drivers/scsi/scsi_transport_spi.c
@@ -795,7 +795,8 @@ spi_dv_device_internal(struct scsi_reque
        }
 
        /* test width */
-       if (i->f->set_width && spi_max_width(starget) && sdev->wdtr) {
+       if (i->f->set_width && spi_max_width(starget) &&
+           scsi_device_wide(sdev)) {
                i->f->set_width(starget, 1);
 
                if (spi_dv_device_compare_inquiry(sreq, buffer,
@@ -811,14 +812,14 @@ spi_dv_device_internal(struct scsi_reque
                return;
 
        /* device can't handle synchronous */
-       if (!sdev->ppr && !sdev->sdtr)
+       if (!scsi_device_sync(sdev) && !scsi_device_dt(sdev))
                return;
 
        /* see if the device has an echo buffer.  If it does we can
         * do the SPI pattern write tests */
 
        len = 0;
-       if (sdev->ppr)
+       if (scsi_device_dt(sdev))
                len = spi_dv_device_get_echo_buffer(sreq, buffer);
 
  retry:
@@ -828,9 +829,11 @@ spi_dv_device_internal(struct scsi_reque
        DV_SET(period, spi_min_period(starget));
        /* try QAS requests; this should be harmless to set if the
         * target supports it */
-       DV_SET(qas, 1);
+       if (scsi_device_qas(sdev))
+               DV_SET(qas, 1);
        /* Also try IU transfers */
-       DV_SET(iu, 1);
+       if (scsi_device_ius(sdev))
+               DV_SET(iu, 1);
        if (spi_min_period(starget) < 9) {
                /* This u320 (or u640). Ignore the coupled parameters
                 * like DT and IU, but set the optional ones */
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to