diff options
author | Karen Higgins <karen.higgins@qlogic.com> | 2009-07-15 16:03:00 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2009-07-30 09:50:00 -0400 |
commit | dca05c4c07c48da0509708d9e562578d269e90e5 (patch) | |
tree | e685e3a45d340670a2b33e1df5d27aa8621dc059 /drivers/scsi | |
parent | 5c656af7e4edfe44c85034d6fa7002909f9c3c59 (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.c | 19 |
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) { |