Daniel Wagner 419e72
From: Quinn Tran <qutran@marvell.com>
Daniel Wagner 419e72
Date: Tue, 26 Oct 2021 04:54:03 -0700
Daniel Wagner 419e72
Subject: scsi: qla2xxx: edif: Fix app start fail
Daniel Wagner 419e72
Patch-mainline: v5.16-rc1
Daniel Wagner 419e72
Git-commit: 8e6d5df3cb32dddf558a52414d29febecb660396
Daniel Wagner 419e72
References: git-fixes
Daniel Wagner 419e72
Daniel Wagner 419e72
On app start, all sessions need to be reset to see if secure connection can
Daniel Wagner 419e72
be made. Fix the broken check which prevents that process.
Daniel Wagner 419e72
Daniel Wagner 419e72
Link: https://lore.kernel.org/r/20211026115412.27691-5-njavali@marvell.com
Daniel Wagner 419e72
Fixes: 4de067e5df12 ("scsi: qla2xxx: edif: Add N2N support for EDIF")
Daniel Wagner 419e72
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Daniel Wagner 419e72
Signed-off-by: Quinn Tran <qutran@marvell.com>
Daniel Wagner 419e72
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Daniel Wagner 419e72
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Daniel Wagner 419e72
Acked-by: Daniel Wagner <dwagner@suse.de>
Daniel Wagner 419e72
---
Daniel Wagner 419e72
 drivers/scsi/qla2xxx/qla_edif.c |   52 ++++++++++++++++++++--------------------
Daniel Wagner 419e72
 1 file changed, 26 insertions(+), 26 deletions(-)
Daniel Wagner 419e72
Daniel Wagner 419e72
--- a/drivers/scsi/qla2xxx/qla_edif.c
Daniel Wagner 419e72
+++ b/drivers/scsi/qla2xxx/qla_edif.c
Daniel Wagner 419e72
@@ -529,7 +529,8 @@ qla_edif_app_start(scsi_qla_host_t *vha,
Daniel Wagner 419e72
 	struct app_start_reply	appreply;
Daniel Wagner 419e72
 	struct fc_port  *fcport, *tf;
Daniel Wagner 419e72
 
Daniel Wagner 419e72
-	ql_dbg(ql_dbg_edif, vha, 0x911d, "%s app start\n", __func__);
Daniel Wagner 419e72
+	ql_log(ql_log_info, vha, 0x1313,
Daniel Wagner 419e72
+	       "EDIF application registration with driver, FC device connections will be re-established.\n");
Daniel Wagner 419e72
 
Daniel Wagner 419e72
 	sg_copy_to_buffer(bsg_job->request_payload.sg_list,
Daniel Wagner 419e72
 	    bsg_job->request_payload.sg_cnt, &appstart,
Daniel Wagner 419e72
@@ -554,37 +555,36 @@ qla_edif_app_start(scsi_qla_host_t *vha,
Daniel Wagner 419e72
 		qla2xxx_wake_dpc(vha);
Daniel Wagner 419e72
 	} else {
Daniel Wagner 419e72
 		list_for_each_entry_safe(fcport, tf, &vha->vp_fcports, list) {
Daniel Wagner 419e72
+			ql_dbg(ql_dbg_edif, vha, 0x2058,
Daniel Wagner 419e72
+			       "FCSP - nn %8phN pn %8phN portid=%06x.\n",
Daniel Wagner 419e72
+			       fcport->node_name, fcport->port_name,
Daniel Wagner 419e72
+			       fcport->d_id.b24);
Daniel Wagner 419e72
 			ql_dbg(ql_dbg_edif, vha, 0xf084,
Daniel Wagner 419e72
-			       "%s: sess %p %8phC lid %#04x s_id %06x logout %d\n",
Daniel Wagner 419e72
-			       __func__, fcport, fcport->port_name,
Daniel Wagner 419e72
-			       fcport->loop_id, fcport->d_id.b24,
Daniel Wagner 419e72
-			       fcport->logout_on_delete);
Daniel Wagner 419e72
-
Daniel Wagner 419e72
-			ql_dbg(ql_dbg_edif, vha, 0xf084,
Daniel Wagner 419e72
-			       "keep %d els_logo %d disc state %d auth state %d stop state %d\n",
Daniel Wagner 419e72
-			       fcport->keep_nport_handle,
Daniel Wagner 419e72
-			       fcport->send_els_logo, fcport->disc_state,
Daniel Wagner 419e72
-			       fcport->edif.auth_state, fcport->edif.app_stop);
Daniel Wagner 419e72
+			       "%s: se_sess %p / sess %p from port %8phC "
Daniel Wagner 419e72
+			       "loop_id %#04x s_id %06x logout %d "
Daniel Wagner 419e72
+			       "keep %d els_logo %d disc state %d auth state %d"
Daniel Wagner 419e72
+			       "stop state %d\n",
Daniel Wagner 419e72
+			       __func__, fcport->se_sess, fcport,
Daniel Wagner 419e72
+			       fcport->port_name, fcport->loop_id,
Daniel Wagner 419e72
+			       fcport->d_id.b24, fcport->logout_on_delete,
Daniel Wagner 419e72
+			       fcport->keep_nport_handle, fcport->send_els_logo,
Daniel Wagner 419e72
+			       fcport->disc_state, fcport->edif.auth_state,
Daniel Wagner 419e72
+			       fcport->edif.app_stop);
Daniel Wagner 419e72
 
Daniel Wagner 419e72
 			if (atomic_read(&vha->loop_state) == LOOP_DOWN)
Daniel Wagner 419e72
 				break;
Daniel Wagner 419e72
-			if (!(fcport->flags & FCF_FCSP_DEVICE))
Daniel Wagner 419e72
-				continue;
Daniel Wagner 419e72
 
Daniel Wagner 419e72
 			fcport->edif.app_started = 1;
Daniel Wagner 419e72
-			if (fcport->edif.app_stop ||
Daniel Wagner 419e72
-			    (fcport->disc_state != DSC_LOGIN_COMPLETE &&
Daniel Wagner 419e72
-			     fcport->disc_state != DSC_LOGIN_PEND &&
Daniel Wagner 419e72
-			     fcport->disc_state != DSC_DELETED)) {
Daniel Wagner 419e72
-				/* no activity */
Daniel Wagner 419e72
-				fcport->edif.app_stop = 0;
Daniel Wagner 419e72
-
Daniel Wagner 419e72
-				ql_dbg(ql_dbg_edif, vha, 0x911e,
Daniel Wagner 419e72
-				       "%s wwpn %8phC calling qla_edif_reset_auth_wait\n",
Daniel Wagner 419e72
-				       __func__, fcport->port_name);
Daniel Wagner 419e72
-				fcport->edif.app_sess_online = 1;
Daniel Wagner 419e72
-				qla_edif_reset_auth_wait(fcport, DSC_LOGIN_PEND, 0);
Daniel Wagner 419e72
-			}
Daniel Wagner 419e72
+			fcport->login_retry = vha->hw->login_retry_count;
Daniel Wagner 419e72
+
Daniel Wagner 419e72
+			/* no activity */
Daniel Wagner 419e72
+			fcport->edif.app_stop = 0;
Daniel Wagner 419e72
+
Daniel Wagner 419e72
+			ql_dbg(ql_dbg_edif, vha, 0x911e,
Daniel Wagner 419e72
+			       "%s wwpn %8phC calling qla_edif_reset_auth_wait\n",
Daniel Wagner 419e72
+			       __func__, fcport->port_name);
Daniel Wagner 419e72
+			fcport->edif.app_sess_online = 1;
Daniel Wagner 419e72
+			qla_edif_reset_auth_wait(fcport, DSC_LOGIN_PEND, 0);
Daniel Wagner 419e72
 			qla_edif_sa_ctl_init(vha, fcport);
Daniel Wagner 419e72
 		}
Daniel Wagner 419e72
 	}