aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorKaren Higgins <karen.higgins@qlogic.com>2009-07-15 16:03:00 -0400
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2009-07-30 09:50:00 -0400
commitdca05c4c07c48da0509708d9e562578d269e90e5 (patch)
treee685e3a45d340670a2b33e1df5d27aa8621dc059 /drivers/scsi
parent5c656af7e4edfe44c85034d6fa7002909f9c3c59 (diff)
[SCSI] qla4xxx: Fix Driver Fault Recovery Completion
Fixed driver bug where adapter recovery did not complete if there were outstanding commands detected on that host adapter. Signed-off-by: Karen Higgins <karen.higgins@qlogic.com> Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/qla4xxx/ql4_os.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
index 6841883b3611..e1cc0d21d890 100644
--- a/drivers/scsi/qla4xxx/ql4_os.c
+++ b/drivers/scsi/qla4xxx/ql4_os.c
@@ -921,18 +921,17 @@ static int qla4xxx_recover_adapter(struct scsi_qla_host *ha,
921 /* Flush any pending ddb changed AENs */ 921 /* Flush any pending ddb changed AENs */
922 qla4xxx_process_aen(ha, FLUSH_DDB_CHANGED_AENS); 922 qla4xxx_process_aen(ha, FLUSH_DDB_CHANGED_AENS);
923 923
924 qla4xxx_flush_active_srbs(ha);
925
924 /* Reset the firmware. If successful, function 926 /* Reset the firmware. If successful, function
925 * returns with ISP interrupts enabled. 927 * returns with ISP interrupts enabled.
926 */ 928 */
927 if (status == QLA_SUCCESS) { 929 DEBUG2(printk("scsi%ld: %s - Performing soft reset..\n",
928 DEBUG2(printk("scsi%ld: %s - Performing soft reset..\n", 930 ha->host_no, __func__));
929 ha->host_no, __func__)); 931 if (ql4xxx_lock_drvr_wait(ha) == QLA_SUCCESS)
930 qla4xxx_flush_active_srbs(ha); 932 status = qla4xxx_soft_reset(ha);
931 if (ql4xxx_lock_drvr_wait(ha) == QLA_SUCCESS) 933 else
932 status = qla4xxx_soft_reset(ha); 934 status = QLA_ERROR;
933 else
934 status = QLA_ERROR;
935 }
936 935
937 /* Flush any pending ddb changed AENs */ 936 /* Flush any pending ddb changed AENs */
938 qla4xxx_process_aen(ha, FLUSH_DDB_CHANGED_AENS); 937 qla4xxx_process_aen(ha, FLUSH_DDB_CHANGED_AENS);
@@ -1661,7 +1660,7 @@ static int qla4xxx_eh_host_reset(struct scsi_cmnd *cmd)
1661 ha = (struct scsi_qla_host *) cmd->device->host->hostdata; 1660 ha = (struct scsi_qla_host *) cmd->device->host->hostdata;
1662 1661
1663 dev_info(&ha->pdev->dev, 1662 dev_info(&ha->pdev->dev,
1664 "scsi(%ld:%d:%d:%d): ADAPTER RESET ISSUED.\n", ha->host_no, 1663 "scsi(%ld:%d:%d:%d): HOST RESET ISSUED.\n", ha->host_no,
1665 cmd->device->channel, cmd->device->id, cmd->device->lun); 1664 cmd->device->channel, cmd->device->id, cmd->device->lun);
1666 1665
1667 if (qla4xxx_wait_for_hba_online(ha) != QLA_SUCCESS) { 1666 if (qla4xxx_wait_for_hba_online(ha) != QLA_SUCCESS) {