From 992357c6514398ab874198f5059c5e5024480f8c Mon Sep 17 00:00:00 2001 From: Chad Dupuis Date: Fri, 8 Feb 2013 01:57:52 -0500 Subject: [PATCH] [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 Signed-off-by: Saurav Kashyap Signed-off-by: James Bottomley --- drivers/scsi/qla2xxx/qla_bsg.c | 39 +++++++++++++++++----------------- 1 file 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, -- 2.34.1