aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorChad Dupuis <chad.dupuis@qlogic.com>2010-10-15 14:27:42 -0400
committerJames Bottomley <James.Bottomley@suse.de>2010-10-25 17:00:22 -0400
commitff454b01b4ebe60b14092943978000928bf8c551 (patch)
tree7652f7b9e6fd5577938b52952615ad3ca76618aa /drivers/scsi
parent4d97cc5342ebb1bef83477fafe18490dd8c59464 (diff)
[SCSI] qla2xxx: Group CS_RESET return status with other link level event statuses.
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>
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/qla2xxx/qla_isr.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index e0e43d9e7ed1..55870a36ec6a 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -1757,6 +1757,8 @@ check_scsi_status:
1757 case CS_INCOMPLETE: 1757 case CS_INCOMPLETE:
1758 case CS_PORT_UNAVAILABLE: 1758 case CS_PORT_UNAVAILABLE:
1759 case CS_TIMEOUT: 1759 case CS_TIMEOUT:
1760 case CS_RESET:
1761
1760 /* 1762 /*
1761 * We are going to have the fc class block the rport 1763 * We are going to have the fc class block the rport
1762 * while we try to recover so instruct the mid layer 1764 * while we try to recover so instruct the mid layer
@@ -1781,10 +1783,6 @@ check_scsi_status:
1781 qla2x00_mark_device_lost(fcport->vha, fcport, 1, 1); 1783 qla2x00_mark_device_lost(fcport->vha, fcport, 1, 1);
1782 break; 1784 break;
1783 1785
1784 case CS_RESET:
1785 cp->result = DID_TRANSPORT_DISRUPTED << 16;
1786 break;
1787
1788 case CS_ABORTED: 1786 case CS_ABORTED:
1789 cp->result = DID_RESET << 16; 1787 cp->result = DID_RESET << 16;
1790 break; 1788 break;