scsi: qla2xxx: edif: Reject AUTH ELS on session down
authorQuinn Tran <qutran@marvell.com>
Tue, 17 Aug 2021 05:13:05 +0000 (22:13 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 24 Aug 2021 02:36:52 +0000 (22:36 -0400)
Reject inflight AUTH ELS if driver is going through session recovery.

Link: https://lore.kernel.org/r/20210817051315.2477-3-njavali@marvell.com
Signed-off-by: Quinn Tran <qutran@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qla2xxx/qla_edif.c
drivers/scsi/qla2xxx/qla_edif.h
drivers/scsi/qla2xxx/qla_os.c

index 7d16955..555c38b 100644 (file)
@@ -2376,7 +2376,7 @@ void qla24xx_auth_els(scsi_qla_host_t *vha, void **pkt, struct rsp_que **rsp)
        fcport = qla2x00_find_fcport_by_pid(host, &purex->pur_info.pur_sid);
 
        if (host->e_dbell.db_flags != EDB_ACTIVE ||
-           (fcport && fcport->loop_id == FC_NO_LOOP_ID)) {
+           (fcport && EDIF_SESSION_DOWN(fcport))) {
                ql_dbg(ql_dbg_edif, host, 0x0910c, "%s e_dbell.db_flags =%x %06x\n",
                    __func__, host->e_dbell.db_flags,
                    fcport ? fcport->d_id.b24 : 0);
index 88495df..9384765 100644 (file)
@@ -127,4 +127,10 @@ struct enode {
                struct purexevent       purexinfo;
        } u;
 };
+
+#define EDIF_SESSION_DOWN(_s) \
+       (_s->disc_state == DSC_DELETE_PEND || \
+        _s->disc_state == DSC_DELETED || \
+        !_s->edif.app_sess_online)
+
 #endif /* __QLA_EDIF_H */
index 5c01b1e..94e12a3 100644 (file)
@@ -4345,7 +4345,7 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len,
                goto fail_elsrej;
        }
        ha->elsrej.c->er_cmd = ELS_LS_RJT;
-       ha->elsrej.c->er_reason = ELS_RJT_BUSY;
+       ha->elsrej.c->er_reason = ELS_RJT_LOGIC;
        ha->elsrej.c->er_explan = ELS_EXPL_UNAB_DATA;
        return 0;