aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qla2xxx
diff options
context:
space:
mode:
authorLalit Chandivade <lalit.chandivade@qlogic.com>2010-09-03 18:20:53 -0400
committerJames Bottomley <James.Bottomley@suse.de>2010-09-05 14:35:00 -0400
commitbddd2d65a48c492d3e585e65df0be89c58b4acda (patch)
treee606ba12087245ba05f62047811305edb108003e /drivers/scsi/qla2xxx
parent77e334d240aa0a771f861656d639ea13e9fc6569 (diff)
[SCSI] qla2xxx: Update to AER support, do early abort commands.
Currently the IOs are returned back in slot reset, this could be late and can cause error handler to invoke. If error handler invokes, eh_abort fails and escalate to device/bus/host resets causing issues. The commands need to be returned back to upper layer in io_error_detected. Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/qla2xxx')
-rw-r--r--drivers/scsi/qla2xxx/qla_init.c20
-rw-r--r--drivers/scsi/qla2xxx/qla_os.c2
2 files changed, 13 insertions, 9 deletions
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 9f71226e0a3e..f2da5c5dacdd 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -3835,17 +3835,19 @@ qla2x00_abort_isp_cleanup(scsi_qla_host_t *vha)
3835 LOOP_DOWN_TIME); 3835 LOOP_DOWN_TIME);
3836 } 3836 }
3837 3837
3838 /* Make sure for ISP 82XX IO DMA is complete */ 3838 if (!ha->flags.eeh_busy) {
3839 if (IS_QLA82XX(ha)) { 3839 /* Make sure for ISP 82XX IO DMA is complete */
3840 if (qla2x00_eh_wait_for_pending_commands(vha, 0, 0, 3840 if (IS_QLA82XX(ha)) {
3841 WAIT_HOST) == QLA_SUCCESS) { 3841 if (qla2x00_eh_wait_for_pending_commands(vha, 0, 0,
3842 DEBUG2(qla_printk(KERN_INFO, ha, 3842 WAIT_HOST) == QLA_SUCCESS) {
3843 "Done wait for pending commands\n")); 3843 DEBUG2(qla_printk(KERN_INFO, ha,
3844 "Done wait for pending commands\n"));
3845 }
3844 } 3846 }
3845 }
3846 3847
3847 /* Requeue all commands in outstanding command list. */ 3848 /* Requeue all commands in outstanding command list. */
3848 qla2x00_abort_all_cmds(vha, DID_RESET << 16); 3849 qla2x00_abort_all_cmds(vha, DID_RESET << 16);
3850 }
3849} 3851}
3850 3852
3851/* 3853/*
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index cfa55827a101..e1782f771400 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -3773,6 +3773,8 @@ qla2xxx_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
3773 } 3773 }
3774 qla2x00_free_irqs(vha); 3774 qla2x00_free_irqs(vha);
3775 pci_disable_device(pdev); 3775 pci_disable_device(pdev);
3776 /* Return back all IOs */
3777 qla2x00_abort_all_cmds(vha, DID_RESET << 16);
3776 return PCI_ERS_RESULT_NEED_RESET; 3778 return PCI_ERS_RESULT_NEED_RESET;
3777 case pci_channel_io_perm_failure: 3779 case pci_channel_io_perm_failure:
3778 ha->flags.pci_channel_io_perm_failure = 1; 3780 ha->flags.pci_channel_io_perm_failure = 1;