lkml.org 
[lkml]   [2021]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 751/917] scsi: qla2xxx: edif: Fix app start delay
    Date
    From: Quinn Tran <qutran@marvell.com>

    [ Upstream commit b492d6a4880fddce098472dec5086d37802c68d3 ]

    Current driver does unnecessary pause for each session to get to certain
    state before allowing the app start call to return. In larger environment,
    this introduces a long delay. Originally the delay was meant to
    synchronize app and driver. However, the with current implementation the
    two sides use various events to synchronize their state.

    The same is applied to the authentication failure call.

    Link: https://lore.kernel.org/r/20211026115412.27691-6-njavali@marvell.com
    Fixes: 4de067e5df12 ("scsi: qla2xxx: edif: Add N2N support for EDIF")
    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 | 64 ++-------------------------------
    1 file changed, 3 insertions(+), 61 deletions(-)

    diff --git a/drivers/scsi/qla2xxx/qla_edif.c b/drivers/scsi/qla2xxx/qla_edif.c
    index 615596becb7a1..cf62f26ce27d9 100644
    --- a/drivers/scsi/qla2xxx/qla_edif.c
    +++ b/drivers/scsi/qla2xxx/qla_edif.c
    @@ -290,63 +290,6 @@ qla_edif_app_check(scsi_qla_host_t *vha, struct app_id appid)
    return false;
    }

    -static void qla_edif_reset_auth_wait(struct fc_port *fcport, int state,
    - int waitonly)
    -{
    - int cnt, max_cnt = 200;
    - bool traced = false;
    -
    - fcport->keep_nport_handle = 1;
    -
    - if (!waitonly) {
    - qla2x00_set_fcport_disc_state(fcport, state);
    - qlt_schedule_sess_for_deletion(fcport);
    - } else {
    - qla2x00_set_fcport_disc_state(fcport, state);
    - }
    -
    - ql_dbg(ql_dbg_edif, fcport->vha, 0xf086,
    - "%s: waiting for session, max_cnt=%u\n",
    - __func__, max_cnt);
    -
    - cnt = 0;
    -
    - if (waitonly) {
    - /* Marker wait min 10 msecs. */
    - msleep(50);
    - cnt += 50;
    - }
    - while (1) {
    - if (!traced) {
    - ql_dbg(ql_dbg_edif, fcport->vha, 0xf086,
    - "%s: session sleep.\n",
    - __func__);
    - traced = true;
    - }
    - msleep(20);
    - cnt++;
    - if (waitonly && (fcport->disc_state == state ||
    - fcport->disc_state == DSC_LOGIN_COMPLETE))
    - break;
    - if (fcport->disc_state == DSC_LOGIN_AUTH_PEND)
    - break;
    - if (cnt > max_cnt)
    - break;
    - }
    -
    - if (!waitonly) {
    - ql_dbg(ql_dbg_edif, fcport->vha, 0xf086,
    - "%s: waited for session - %8phC, loopid=%x portid=%06x fcport=%p state=%u, cnt=%u\n",
    - __func__, fcport->port_name, fcport->loop_id,
    - fcport->d_id.b24, fcport, fcport->disc_state, cnt);
    - } else {
    - ql_dbg(ql_dbg_edif, fcport->vha, 0xf086,
    - "%s: waited ONLY for session - %8phC, loopid=%x portid=%06x fcport=%p state=%u, cnt=%u\n",
    - __func__, fcport->port_name, fcport->loop_id,
    - fcport->d_id.b24, fcport, fcport->disc_state, cnt);
    - }
    -}
    -
    static void
    qla_edif_free_sa_ctl(fc_port_t *fcport, struct edif_sa_ctl *sa_ctl,
    int index)
    @@ -583,8 +526,8 @@ qla_edif_app_start(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
    ql_dbg(ql_dbg_edif, vha, 0x911e,
    "%s wwpn %8phC calling qla_edif_reset_auth_wait\n",
    __func__, fcport->port_name);
    - fcport->edif.app_sess_online = 1;
    - qla_edif_reset_auth_wait(fcport, DSC_LOGIN_PEND, 0);
    + fcport->edif.app_sess_online = 0;
    + qlt_schedule_sess_for_deletion(fcport);
    qla_edif_sa_ctl_init(vha, fcport);
    }
    }
    @@ -800,7 +743,6 @@ qla_edif_app_authok(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
    ql_dbg(ql_dbg_edif, vha, 0x911e,
    "%s AUTH complete - RESUME with prli for wwpn %8phC\n",
    __func__, fcport->port_name);
    - qla_edif_reset_auth_wait(fcport, DSC_LOGIN_PEND, 1);
    qla24xx_post_prli_work(vha, fcport);
    }

    @@ -873,7 +815,7 @@ qla_edif_app_authfail(scsi_qla_host_t *vha, struct bsg_job *bsg_job)

    if (qla_ini_mode_enabled(fcport->vha)) {
    fcport->send_els_logo = 1;
    - qla_edif_reset_auth_wait(fcport, DSC_LOGIN_PEND, 0);
    + qlt_schedule_sess_for_deletion(fcport);
    }
    }

    --
    2.33.0


    \
     
     \ /
      Last update: 2021-11-16 01:38    [W:2.246 / U:1.364 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site