lkml.org 
[lkml]   [2022]   [Aug]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.19 0624/1157] scsi: qla2xxx: edif: Reduce N2N thrashing at app_start time
    Date
    From: Quinn Tran <qutran@marvell.com>

    [ Upstream commit 37be3f9d6993a721bc019f03c97ea0fe66319997 ]

    For N2N + remote WWPN is bigger than local adapter, remote adapter will
    login to local adapter while authentication application is not running.
    When authentication application starts, the current session in FW needs to
    to be invalidated.

    Make sure the old session is torn down before triggering a relogin.

    Link: https://lore.kernel.org/r/20220608115849.16693-9-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 | 47 ++++++++++++++++++++++++---------
    1 file changed, 34 insertions(+), 13 deletions(-)

    diff --git a/drivers/scsi/qla2xxx/qla_edif.c b/drivers/scsi/qla2xxx/qla_edif.c
    index 7239439120c0..ee8931392ce2 100644
    --- a/drivers/scsi/qla2xxx/qla_edif.c
    +++ b/drivers/scsi/qla2xxx/qla_edif.c
    @@ -517,11 +517,28 @@ qla_edif_app_start(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
    list_for_each_entry_safe(fcport, tf, &vha->vp_fcports, list)
    fcport->n2n_link_reset_cnt = 0;

    - if (vha->hw->flags.n2n_fw_acc_sec)
    - set_bit(N2N_LINK_RESET, &vha->dpc_flags);
    - else
    + if (vha->hw->flags.n2n_fw_acc_sec) {
    + list_for_each_entry_safe(fcport, tf, &vha->vp_fcports, list)
    + qla_edif_sa_ctl_init(vha, fcport);
    +
    + /*
    + * While authentication app was not running, remote device
    + * could still try to login with this local port. Let's
    + * clear the state and try again.
    + */
    + qla2x00_wait_for_sess_deletion(vha);
    +
    + /* bounce the link to get the other guy to relogin */
    + if (!vha->hw->flags.n2n_bigger) {
    + set_bit(N2N_LINK_RESET, &vha->dpc_flags);
    + qla2xxx_wake_dpc(vha);
    + }
    + } else {
    + qla2x00_wait_for_hba_online(vha);
    set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
    - qla2xxx_wake_dpc(vha);
    + qla2xxx_wake_dpc(vha);
    + qla2x00_wait_for_hba_online(vha);
    + }
    } else {
    list_for_each_entry_safe(fcport, tf, &vha->vp_fcports, list) {
    ql_dbg(ql_dbg_edif, vha, 0x2058,
    @@ -920,17 +937,21 @@ qla_edif_app_getfcinfo(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
    if (tdid.b24 != 0 && tdid.b24 != fcport->d_id.b24)
    continue;

    - if (fcport->scan_state != QLA_FCPORT_FOUND)
    - continue;
    + if (!N2N_TOPO(vha->hw)) {
    + if (fcport->scan_state != QLA_FCPORT_FOUND)
    + continue;

    - if (fcport->port_type == FCT_UNKNOWN && !fcport->fc4_features)
    - rval = qla24xx_async_gffid(vha, fcport, true);
    + if (fcport->port_type == FCT_UNKNOWN &&
    + !fcport->fc4_features)
    + rval = qla24xx_async_gffid(vha, fcport,
    + true);

    - if (!rval &&
    - !(fcport->fc4_features & FC4_FF_TARGET ||
    - fcport->port_type &
    - (FCT_TARGET | FCT_NVME_TARGET)))
    - continue;
    + if (!rval &&
    + !(fcport->fc4_features & FC4_FF_TARGET ||
    + fcport->port_type &
    + (FCT_TARGET | FCT_NVME_TARGET)))
    + continue;
    + }

    rval = 0;

    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-16 06:34    [W:4.313 / U:0.328 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site