diff options
author | Quinn Tran <qutran@marvell.com> | 2021-08-17 07:13:05 +0200 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2021-08-24 04:36:52 +0200 |
commit | 225479296c4fb2d3449e55b48eca2a9d6aca1e4e (patch) | |
tree | e9ee63a38178b37dcca637cec57239e88a51c383 /drivers/scsi | |
parent | scsi: qla2xxx: edif: Fix stale session (diff) | |
download | linux-225479296c4fb2d3449e55b48eca2a9d6aca1e4e.tar.xz linux-225479296c4fb2d3449e55b48eca2a9d6aca1e4e.zip |
scsi: qla2xxx: edif: Reject AUTH ELS on session down
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>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_edif.c | 2 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_edif.h | 6 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_os.c | 2 |
3 files changed, 8 insertions, 2 deletions
diff --git a/drivers/scsi/qla2xxx/qla_edif.c b/drivers/scsi/qla2xxx/qla_edif.c index 7d16955383dd..555c38bea08a 100644 --- a/drivers/scsi/qla2xxx/qla_edif.c +++ b/drivers/scsi/qla2xxx/qla_edif.c @@ -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); diff --git a/drivers/scsi/qla2xxx/qla_edif.h b/drivers/scsi/qla2xxx/qla_edif.h index 88495df9a3c2..9384765460cf 100644 --- a/drivers/scsi/qla2xxx/qla_edif.h +++ b/drivers/scsi/qla2xxx/qla_edif.h @@ -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 */ diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 5c01b1eaf84e..94e12a398d7f 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -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; |