diff options
author | Chad Dupuis <chad.dupuis@qlogic.com> | 2013-02-08 01:57:52 -0500 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2013-02-22 12:41:20 +0000 |
commit | 992357c6514398ab874198f5059c5e5024480f8c (patch) | |
tree | 75a4701201db1ab84a77272033dc4d644d6a5b3f /drivers/scsi | |
parent | 67b2a31f517a43631af218d146e39f4e502b3e83 (diff) | |
download | linux-992357c6514398ab874198f5059c5e5024480f8c.tar.bz2 |
[SCSI] qla2xxx: Move loopback mode reset after chip reset check.
If we need to do a chip reset because of a serious loopback error don't try to
reset the loopback mode on the port as the mailbox command will timeout.
Signed-off-by: Chad Dupuis <chad.dupuis@qlogic.com>
Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_bsg.c | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/drivers/scsi/qla2xxx/qla_bsg.c b/drivers/scsi/qla2xxx/qla_bsg.c index be299c83e07e..747f440b1a93 100644 --- a/drivers/scsi/qla2xxx/qla_bsg.c +++ b/drivers/scsi/qla2xxx/qla_bsg.c @@ -790,6 +790,26 @@ qla2x00_process_loopback(struct fc_bsg_job *bsg_job) command_sent = INT_DEF_LB_LOOPBACK_CMD; rval = qla2x00_loopback_test(vha, &elreq, response); + if (response[0] == MBS_COMMAND_ERROR && + response[1] == MBS_LB_RESET) { + ql_log(ql_log_warn, vha, 0x7029, + "MBX command error, Aborting ISP.\n"); + set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); + qla2xxx_wake_dpc(vha); + qla2x00_wait_for_chip_reset(vha); + /* Also reset the MPI */ + if (IS_QLA81XX(ha)) { + if (qla81xx_restart_mpi_firmware(vha) != + QLA_SUCCESS) { + ql_log(ql_log_warn, vha, 0x702a, + "MPI reset failed.\n"); + } + } + + rval = -EIO; + goto done_free_dma_rsp; + } + if (new_config[0]) { int ret; @@ -811,25 +831,6 @@ qla2x00_process_loopback(struct fc_bsg_job *bsg_job) } - if (response[0] == MBS_COMMAND_ERROR && - response[1] == MBS_LB_RESET) { - ql_log(ql_log_warn, vha, 0x7029, - "MBX command error, Aborting ISP.\n"); - set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); - qla2xxx_wake_dpc(vha); - qla2x00_wait_for_chip_reset(vha); - /* Also reset the MPI */ - if (IS_QLA81XX(ha)) { - if (qla81xx_restart_mpi_firmware(vha) != - QLA_SUCCESS) { - ql_log(ql_log_warn, vha, 0x702a, - "MPI reset failed.\n"); - } - } - - rval = -EIO; - goto done_free_dma_rsp; - } } else { type = "FC_BSG_HST_VENDOR_LOOPBACK"; ql_dbg(ql_dbg_user, vha, 0x702b, |