|
Daniel Wagner |
24651a |
From: Quinn Tran <qutran@marvell.com>
|
|
Daniel Wagner |
24651a |
Date: Wed, 8 Jun 2022 04:58:45 -0700
|
|
Daniel Wagner |
24651a |
Subject: scsi: qla2xxx: edif: Fix session thrash
|
|
Denis Kirjanov |
718367 |
Patch-mainline: v5.20-rc1
|
|
Daniel Wagner |
24651a |
Git-commit: a8fdfb0b39c2b31722c70bdf2272b949d5af4b7b
|
|
Daniel Wagner |
24651a |
References: bsc#1201958
|
|
Daniel Wagner |
24651a |
|
|
Daniel Wagner |
24651a |
Current code prematurely sends out PRLI before authentication application
|
|
Daniel Wagner |
24651a |
has given the OK to do so. This causes PRLI failure and session teardown.
|
|
Daniel Wagner |
24651a |
|
|
Daniel Wagner |
24651a |
Prevents PRLI from going out before authentication app gives the OK.
|
|
Daniel Wagner |
24651a |
|
|
Daniel Wagner |
24651a |
Link: https://lore.kernel.org/r/20220608115849.16693-7-njavali@marvell.com
|
|
Daniel Wagner |
24651a |
Fixes: 91f6f5fbe87b ("scsi: qla2xxx: edif: Reduce connection thrash")
|
|
Daniel Wagner |
24651a |
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
|
|
Daniel Wagner |
24651a |
Signed-off-by: Quinn Tran <qutran@marvell.com>
|
|
Daniel Wagner |
24651a |
Signed-off-by: Nilesh Javali <njavali@marvell.com>
|
|
Daniel Wagner |
24651a |
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
|
|
Daniel Wagner |
24651a |
Acked-by: Daniel Wagner <dwagner@suse.de>
|
|
Daniel Wagner |
24651a |
---
|
|
Daniel Wagner |
24651a |
drivers/scsi/qla2xxx/qla_edif.c | 2 +-
|
|
Daniel Wagner |
24651a |
drivers/scsi/qla2xxx/qla_edif.h | 4 ++++
|
|
Daniel Wagner |
24651a |
drivers/scsi/qla2xxx/qla_init.c | 10 +++++++++-
|
|
Daniel Wagner |
24651a |
3 files changed, 14 insertions(+), 2 deletions(-)
|
|
Daniel Wagner |
24651a |
|
|
Daniel Wagner |
24651a |
--- a/drivers/scsi/qla2xxx/qla_edif.c
|
|
Daniel Wagner |
24651a |
+++ b/drivers/scsi/qla2xxx/qla_edif.c
|
|
Daniel Wagner |
24651a |
@@ -3517,7 +3517,7 @@ int qla_edif_process_els(scsi_qla_host_t
|
|
Daniel Wagner |
24651a |
if (qla_bsg_check(vha, bsg_job, fcport))
|
|
Daniel Wagner |
24651a |
return 0;
|
|
Daniel Wagner |
24651a |
|
|
Daniel Wagner |
24651a |
- if (fcport->loop_id == FC_NO_LOOP_ID) {
|
|
Daniel Wagner |
24651a |
+ if (EDIF_SESS_DELETE(fcport)) {
|
|
Daniel Wagner |
24651a |
ql_dbg(ql_dbg_edif, vha, 0x910d,
|
|
Daniel Wagner |
24651a |
"%s ELS code %x, no loop id.\n", __func__,
|
|
Daniel Wagner |
24651a |
bsg_request->rqst_data.r_els.els_code);
|
|
Daniel Wagner |
24651a |
--- a/drivers/scsi/qla2xxx/qla_edif.h
|
|
Daniel Wagner |
24651a |
+++ b/drivers/scsi/qla2xxx/qla_edif.h
|
|
Daniel Wagner |
24651a |
@@ -141,4 +141,8 @@ struct enode {
|
|
Daniel Wagner |
24651a |
(DBELL_ACTIVE(_fcport->vha) && \
|
|
Daniel Wagner |
24651a |
(_fcport->disc_state == DSC_LOGIN_AUTH_PEND))
|
|
Daniel Wagner |
24651a |
|
|
Daniel Wagner |
24651a |
+#define EDIF_SESS_DELETE(_s) \
|
|
Daniel Wagner |
24651a |
+ (qla_ini_mode_enabled(_s->vha) && (_s->disc_state == DSC_DELETE_PEND || \
|
|
Daniel Wagner |
24651a |
+ _s->disc_state == DSC_DELETED))
|
|
Daniel Wagner |
24651a |
+
|
|
Daniel Wagner |
24651a |
#endif /* __QLA_EDIF_H */
|
|
Daniel Wagner |
24651a |
--- a/drivers/scsi/qla2xxx/qla_init.c
|
|
Daniel Wagner |
24651a |
+++ b/drivers/scsi/qla2xxx/qla_init.c
|
|
Daniel Wagner |
24651a |
@@ -1765,8 +1765,16 @@ int qla24xx_fcport_handle_login(struct s
|
|
Daniel Wagner |
24651a |
break;
|
|
Daniel Wagner |
24651a |
|
|
Daniel Wagner |
24651a |
case DSC_LOGIN_PEND:
|
|
Daniel Wagner |
24651a |
- if (fcport->fw_login_state == DSC_LS_PLOGI_COMP)
|
|
Daniel Wagner |
24651a |
+ if (vha->hw->flags.edif_enabled)
|
|
Daniel Wagner |
24651a |
+ break;
|
|
Daniel Wagner |
24651a |
+
|
|
Daniel Wagner |
24651a |
+ if (fcport->fw_login_state == DSC_LS_PLOGI_COMP) {
|
|
Daniel Wagner |
24651a |
+ ql_dbg(ql_dbg_disc, vha, 0x2118,
|
|
Daniel Wagner |
24651a |
+ "%s %d %8phC post %s PRLI\n",
|
|
Daniel Wagner |
24651a |
+ __func__, __LINE__, fcport->port_name,
|
|
Daniel Wagner |
24651a |
+ NVME_TARGET(vha->hw, fcport) ? "NVME" : "FC");
|
|
Daniel Wagner |
24651a |
qla24xx_post_prli_work(vha, fcport);
|
|
Daniel Wagner |
24651a |
+ }
|
|
Daniel Wagner |
24651a |
break;
|
|
Daniel Wagner |
24651a |
|
|
Daniel Wagner |
24651a |
case DSC_UPD_FCPORT:
|