[SCSI] qla2xxx: Group CS_RESET return status with other link level event statuses.
authorChad Dupuis <chad.dupuis@qlogic.com>
Fri, 15 Oct 2010 18:27:42 +0000 (11:27 -0700)
committerJames Bottomley <James.Bottomley@suse.de>
Mon, 25 Oct 2010 21:00:22 +0000 (16:00 -0500)
Currently when we receive a CS_RESET as a response for a SCSI command the
driver will return DID_TRANSPORT_DISRUPTED back to the SCSI mid-layer.  There
are certain circumstances where this could cause the mid-layer to exhaust all of
its retries if the FC port goes away for a short time.  This will result in
commands being prematurly failed.  Moving the CS_RESET return code to be
grouped with other link level events will cause the FC transport layer to block
that target's queue thus preventing the premature exhaustion of retries.

Signed-off-by: Chad Dupuis <chad.dupuis@qlogic.com>
Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/qla2xxx/qla_isr.c

index e0e43d9e7ed130346d27f86c7f60b933c2fea6cf..55870a36ec6a3dca490819085775c44839910f9b 100644 (file)
@@ -1757,6 +1757,8 @@ check_scsi_status:
        case CS_INCOMPLETE:
        case CS_PORT_UNAVAILABLE:
        case CS_TIMEOUT:
+       case CS_RESET:
+
                /*
                 * We are going to have the fc class block the rport
                 * while we try to recover so instruct the mid layer
@@ -1781,10 +1783,6 @@ check_scsi_status:
                        qla2x00_mark_device_lost(fcport->vha, fcport, 1, 1);
                break;
 
-       case CS_RESET:
-               cp->result = DID_TRANSPORT_DISRUPTED << 16;
-               break;
-
        case CS_ABORTED:
                cp->result = DID_RESET << 16;
                break;