From: Quinn Tran <qut...@marvell.com>

Reject eh_{abort|device_reset|target_reset}, when rport is
being torn down or chip is down.

Signed-off-by: Quinn Tran <quinn.t...@cavium.com>
Signed-off-by: Himanshu Madhani <hmadh...@marvell.com>
---
 drivers/scsi/qla2xxx/qla_os.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 2e58cff9d200..d416ac5d1e4c 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -1296,6 +1296,9 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd)
        if (!qpair)
                return SUCCESS;
 
+       if (sp->fcport && sp->fcport->deleted)
+               return SUCCESS;
+
        spin_lock_irqsave(qpair->qp_lock_ptr, flags);
        if (sp->type != SRB_SCSI_CMD || GET_CMD_SP(sp) != cmd) {
                /* there's a chance an interrupt could clear
@@ -1420,6 +1423,9 @@ __qla2xxx_eh_generic_reset(char *name, enum 
nexus_wait_type type,
        if (err != 0)
                return err;
 
+       if (fcport->deleted)
+               return SUCCESS;
+
        ql_log(ql_log_info, vha, 0x8009,
            "%s RESET ISSUED nexus=%ld:%d:%llu cmd=%p.\n", name, vha->host_no,
            cmd->device->id, cmd->device->lun, cmd);
@@ -1534,6 +1540,9 @@ qla2xxx_eh_bus_reset(struct scsi_cmnd *cmd)
                return ret;
        ret = FAILED;
 
+       if (qla2x00_chip_is_down(vha))
+               return ret;
+
        ql_log(ql_log_info, vha, 0x8012,
            "BUS RESET ISSUED nexus=%ld:%d:%llu.\n", vha->host_no, id, lun);
 
-- 
2.12.0

Reply via email to