scsi: qla2xxx: edif: Fix session thrash
authorQuinn Tran <qutran@marvell.com>
Wed, 8 Jun 2022 11:58:45 +0000 (04:58 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 Aug 2022 12:23:43 +0000 (14:23 +0200)
[ Upstream commit a8fdfb0b39c2b31722c70bdf2272b949d5af4b7b ]

Current code prematurely sends out PRLI before authentication application
has given the OK to do so. This causes PRLI failure and session teardown.

Prevents PRLI from going out before authentication app gives the OK.

Link: https://lore.kernel.org/r/20220608115849.16693-7-njavali@marvell.com
Fixes: 91f6f5fbe87b ("scsi: qla2xxx: edif: Reduce connection thrash")
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/scsi/qla2xxx/qla_edif.c
drivers/scsi/qla2xxx/qla_edif.h
drivers/scsi/qla2xxx/qla_init.c

index c0971888a0a137b97d96000699d10afac3ec4155..8e9237434e8b1dca681066aab3e1bfd67fcfb65e 100644 (file)
@@ -3437,7 +3437,7 @@ int qla_edif_process_els(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
        if (qla_bsg_check(vha, bsg_job, fcport))
                return 0;
 
-       if (fcport->loop_id == FC_NO_LOOP_ID) {
+       if (EDIF_SESS_DELETE(fcport)) {
                ql_dbg(ql_dbg_edif, vha, 0x910d,
                    "%s ELS code %x, no loop id.\n", __func__,
                    bsg_request->rqst_data.r_els.els_code);
index a965ca8e47ce754e2ebd2289ce6160219beca268..b9cedf6defd94a83314c322e853dbff533afba72 100644 (file)
@@ -140,4 +140,8 @@ struct enode {
        (DBELL_ACTIVE(_fcport->vha) && \
         (_fcport->disc_state == DSC_LOGIN_AUTH_PEND))
 
+#define EDIF_SESS_DELETE(_s) \
+       (qla_ini_mode_enabled(_s->vha) && (_s->disc_state == DSC_DELETE_PEND || \
+        _s->disc_state == DSC_DELETED))
+
 #endif /* __QLA_EDIF_H */
index 49cfe8c9f3bb215b1bede5f73db4cbf41740ccff..edc29d6ebb283752e5aea57ccf49d8803ddd1405 100644 (file)
@@ -1764,8 +1764,16 @@ int qla24xx_fcport_handle_login(struct scsi_qla_host *vha, fc_port_t *fcport)
                break;
 
        case DSC_LOGIN_PEND:
-               if (fcport->fw_login_state == DSC_LS_PLOGI_COMP)
+               if (vha->hw->flags.edif_enabled)
+                       break;
+
+               if (fcport->fw_login_state == DSC_LS_PLOGI_COMP) {
+                       ql_dbg(ql_dbg_disc, vha, 0x2118,
+                              "%s %d %8phC post %s PRLI\n",
+                              __func__, __LINE__, fcport->port_name,
+                              NVME_TARGET(vha->hw, fcport) ? "NVME" : "FC");
                        qla24xx_post_prli_work(vha, fcport);
+               }
                break;
 
        case DSC_UPD_FCPORT: