|
Daniel Wagner |
b86793 |
From: Quinn Tran <qutran@marvell.com>
|
|
Daniel Wagner |
b86793 |
Date: Tue, 26 Oct 2021 04:54:04 -0700
|
|
Daniel Wagner |
b86793 |
Subject: scsi: qla2xxx: edif: Fix app start delay
|
|
Daniel Wagner |
b86793 |
Patch-mainline: v5.16-rc1
|
|
Daniel Wagner |
b86793 |
Git-commit: b492d6a4880fddce098472dec5086d37802c68d3
|
|
Daniel Wagner |
b86793 |
References: git-fixes
|
|
Daniel Wagner |
b86793 |
|
|
Daniel Wagner |
b86793 |
Current driver does unnecessary pause for each session to get to certain
|
|
Daniel Wagner |
b86793 |
state before allowing the app start call to return. In larger environment,
|
|
Daniel Wagner |
b86793 |
this introduces a long delay. Originally the delay was meant to
|
|
Daniel Wagner |
b86793 |
synchronize app and driver. However, the with current implementation the
|
|
Daniel Wagner |
b86793 |
two sides use various events to synchronize their state.
|
|
Daniel Wagner |
b86793 |
|
|
Daniel Wagner |
b86793 |
The same is applied to the authentication failure call.
|
|
Daniel Wagner |
b86793 |
|
|
Daniel Wagner |
b86793 |
Link: https://lore.kernel.org/r/20211026115412.27691-6-njavali@marvell.com
|
|
Daniel Wagner |
b86793 |
Fixes: 4de067e5df12 ("scsi: qla2xxx: edif: Add N2N support for EDIF")
|
|
Daniel Wagner |
b86793 |
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
|
|
Daniel Wagner |
b86793 |
Signed-off-by: Quinn Tran <qutran@marvell.com>
|
|
Daniel Wagner |
b86793 |
Signed-off-by: Nilesh Javali <njavali@marvell.com>
|
|
Daniel Wagner |
b86793 |
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
|
|
Daniel Wagner |
b86793 |
Acked-by: Daniel Wagner <dwagner@suse.de>
|
|
Daniel Wagner |
b86793 |
---
|
|
Daniel Wagner |
b86793 |
drivers/scsi/qla2xxx/qla_edif.c | 64 +---------------------------------------
|
|
Daniel Wagner |
b86793 |
1 file changed, 3 insertions(+), 61 deletions(-)
|
|
Daniel Wagner |
b86793 |
|
|
Daniel Wagner |
b86793 |
--- a/drivers/scsi/qla2xxx/qla_edif.c
|
|
Daniel Wagner |
b86793 |
+++ b/drivers/scsi/qla2xxx/qla_edif.c
|
|
Daniel Wagner |
b86793 |
@@ -290,63 +290,6 @@ qla_edif_app_check(scsi_qla_host_t *vha,
|
|
Daniel Wagner |
b86793 |
return false;
|
|
Daniel Wagner |
b86793 |
}
|
|
Daniel Wagner |
b86793 |
|
|
Daniel Wagner |
b86793 |
-static void qla_edif_reset_auth_wait(struct fc_port *fcport, int state,
|
|
Daniel Wagner |
b86793 |
- int waitonly)
|
|
Daniel Wagner |
b86793 |
-{
|
|
Daniel Wagner |
b86793 |
- int cnt, max_cnt = 200;
|
|
Daniel Wagner |
b86793 |
- bool traced = false;
|
|
Daniel Wagner |
b86793 |
-
|
|
Daniel Wagner |
b86793 |
- fcport->keep_nport_handle = 1;
|
|
Daniel Wagner |
b86793 |
-
|
|
Daniel Wagner |
b86793 |
- if (!waitonly) {
|
|
Daniel Wagner |
b86793 |
- qla2x00_set_fcport_disc_state(fcport, state);
|
|
Daniel Wagner |
b86793 |
- qlt_schedule_sess_for_deletion(fcport);
|
|
Daniel Wagner |
b86793 |
- } else {
|
|
Daniel Wagner |
b86793 |
- qla2x00_set_fcport_disc_state(fcport, state);
|
|
Daniel Wagner |
b86793 |
- }
|
|
Daniel Wagner |
b86793 |
-
|
|
Daniel Wagner |
b86793 |
- ql_dbg(ql_dbg_edif, fcport->vha, 0xf086,
|
|
Daniel Wagner |
b86793 |
- "%s: waiting for session, max_cnt=%u\n",
|
|
Daniel Wagner |
b86793 |
- __func__, max_cnt);
|
|
Daniel Wagner |
b86793 |
-
|
|
Daniel Wagner |
b86793 |
- cnt = 0;
|
|
Daniel Wagner |
b86793 |
-
|
|
Daniel Wagner |
b86793 |
- if (waitonly) {
|
|
Daniel Wagner |
b86793 |
- /* Marker wait min 10 msecs. */
|
|
Daniel Wagner |
b86793 |
- msleep(50);
|
|
Daniel Wagner |
b86793 |
- cnt += 50;
|
|
Daniel Wagner |
b86793 |
- }
|
|
Daniel Wagner |
b86793 |
- while (1) {
|
|
Daniel Wagner |
b86793 |
- if (!traced) {
|
|
Daniel Wagner |
b86793 |
- ql_dbg(ql_dbg_edif, fcport->vha, 0xf086,
|
|
Daniel Wagner |
b86793 |
- "%s: session sleep.\n",
|
|
Daniel Wagner |
b86793 |
- __func__);
|
|
Daniel Wagner |
b86793 |
- traced = true;
|
|
Daniel Wagner |
b86793 |
- }
|
|
Daniel Wagner |
b86793 |
- msleep(20);
|
|
Daniel Wagner |
b86793 |
- cnt++;
|
|
Daniel Wagner |
b86793 |
- if (waitonly && (fcport->disc_state == state ||
|
|
Daniel Wagner |
b86793 |
- fcport->disc_state == DSC_LOGIN_COMPLETE))
|
|
Daniel Wagner |
b86793 |
- break;
|
|
Daniel Wagner |
b86793 |
- if (fcport->disc_state == DSC_LOGIN_AUTH_PEND)
|
|
Daniel Wagner |
b86793 |
- break;
|
|
Daniel Wagner |
b86793 |
- if (cnt > max_cnt)
|
|
Daniel Wagner |
b86793 |
- break;
|
|
Daniel Wagner |
b86793 |
- }
|
|
Daniel Wagner |
b86793 |
-
|
|
Daniel Wagner |
b86793 |
- if (!waitonly) {
|
|
Daniel Wagner |
b86793 |
- ql_dbg(ql_dbg_edif, fcport->vha, 0xf086,
|
|
Daniel Wagner |
b86793 |
- "%s: waited for session - %8phC, loopid=%x portid=%06x fcport=%p state=%u, cnt=%u\n",
|
|
Daniel Wagner |
b86793 |
- __func__, fcport->port_name, fcport->loop_id,
|
|
Daniel Wagner |
b86793 |
- fcport->d_id.b24, fcport, fcport->disc_state, cnt);
|
|
Daniel Wagner |
b86793 |
- } else {
|
|
Daniel Wagner |
b86793 |
- ql_dbg(ql_dbg_edif, fcport->vha, 0xf086,
|
|
Daniel Wagner |
b86793 |
- "%s: waited ONLY for session - %8phC, loopid=%x portid=%06x fcport=%p state=%u, cnt=%u\n",
|
|
Daniel Wagner |
b86793 |
- __func__, fcport->port_name, fcport->loop_id,
|
|
Daniel Wagner |
b86793 |
- fcport->d_id.b24, fcport, fcport->disc_state, cnt);
|
|
Daniel Wagner |
b86793 |
- }
|
|
Daniel Wagner |
b86793 |
-}
|
|
Daniel Wagner |
b86793 |
-
|
|
Daniel Wagner |
b86793 |
static void
|
|
Daniel Wagner |
b86793 |
qla_edif_free_sa_ctl(fc_port_t *fcport, struct edif_sa_ctl *sa_ctl,
|
|
Daniel Wagner |
b86793 |
int index)
|
|
Daniel Wagner |
b86793 |
@@ -583,8 +526,8 @@ qla_edif_app_start(scsi_qla_host_t *vha,
|
|
Daniel Wagner |
b86793 |
ql_dbg(ql_dbg_edif, vha, 0x911e,
|
|
Daniel Wagner |
b86793 |
"%s wwpn %8phC calling qla_edif_reset_auth_wait\n",
|
|
Daniel Wagner |
b86793 |
__func__, fcport->port_name);
|
|
Daniel Wagner |
b86793 |
- fcport->edif.app_sess_online = 1;
|
|
Daniel Wagner |
b86793 |
- qla_edif_reset_auth_wait(fcport, DSC_LOGIN_PEND, 0);
|
|
Daniel Wagner |
b86793 |
+ fcport->edif.app_sess_online = 0;
|
|
Daniel Wagner |
b86793 |
+ qlt_schedule_sess_for_deletion(fcport);
|
|
Daniel Wagner |
b86793 |
qla_edif_sa_ctl_init(vha, fcport);
|
|
Daniel Wagner |
b86793 |
}
|
|
Daniel Wagner |
b86793 |
}
|
|
Daniel Wagner |
b86793 |
@@ -800,7 +743,6 @@ qla_edif_app_authok(scsi_qla_host_t *vha
|
|
Daniel Wagner |
b86793 |
ql_dbg(ql_dbg_edif, vha, 0x911e,
|
|
Daniel Wagner |
b86793 |
"%s AUTH complete - RESUME with prli for wwpn %8phC\n",
|
|
Daniel Wagner |
b86793 |
__func__, fcport->port_name);
|
|
Daniel Wagner |
b86793 |
- qla_edif_reset_auth_wait(fcport, DSC_LOGIN_PEND, 1);
|
|
Daniel Wagner |
b86793 |
qla24xx_post_prli_work(vha, fcport);
|
|
Daniel Wagner |
b86793 |
}
|
|
Daniel Wagner |
b86793 |
|
|
Daniel Wagner |
b86793 |
@@ -873,7 +815,7 @@ qla_edif_app_authfail(scsi_qla_host_t *v
|
|
Daniel Wagner |
b86793 |
|
|
Daniel Wagner |
b86793 |
if (qla_ini_mode_enabled(fcport->vha)) {
|
|
Daniel Wagner |
b86793 |
fcport->send_els_logo = 1;
|
|
Daniel Wagner |
b86793 |
- qla_edif_reset_auth_wait(fcport, DSC_LOGIN_PEND, 0);
|
|
Daniel Wagner |
b86793 |
+ qlt_schedule_sess_for_deletion(fcport);
|
|
Daniel Wagner |
b86793 |
}
|
|
Daniel Wagner |
b86793 |
}
|
|
Daniel Wagner |
b86793 |
|