> On Aug 6, 2020, at 6:10 AM, Nilesh Javali <njavali@xxxxxxxxxxx> wrote: > > From: Quinn Tran <qutran@xxxxxxxxxxx> > > Multipath errors were seen during failback due to login timeout. > The remote device sent LOGO, the local host teared down the session > and did relogin. The RSCN arrived indicates remote device is going > through failover after which the relogin is in a 20s timeout phase. > At this point the driver is stuck in the relogin process. > Add a fix to delete the session as part of abort/flush the login. > > Signed-off-by: Quinn Tran <qutran@xxxxxxxxxxx> > Signed-off-by: Nilesh Javali <njavali@xxxxxxxxxxx> > --- > drivers/scsi/qla2xxx/qla_gs.c | 19 ++++++++++++++++--- > drivers/scsi/qla2xxx/qla_target.c | 2 +- > 2 files changed, 17 insertions(+), 4 deletions(-) > > diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c > index 8c30d9dbb48c..2d7a47a2873b 100644 > --- a/drivers/scsi/qla2xxx/qla_gs.c > +++ b/drivers/scsi/qla2xxx/qla_gs.c > @@ -3536,10 +3536,23 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, srb_t *sp) > } > > if (fcport->scan_state != QLA_FCPORT_FOUND) { > + bool do_delete = false; > + > + if (fcport->scan_needed && > + fcport->disc_state == DSC_LOGIN_PEND) { > + /* his cable just got disconnected after we > + * send him a login. Do delete to prevent > + * timeout > + */ Small nit.. the comment should describe who is “his” in this case > + fcport->logout_on_delete = 1; > + do_delete = true; > + } > + > fcport->scan_needed = 0; > - if ((qla_dual_mode_enabled(vha) || > - qla_ini_mode_enabled(vha)) && > - atomic_read(&fcport->state) == FCS_ONLINE) { > + if (((qla_dual_mode_enabled(vha) || > + qla_ini_mode_enabled(vha)) && > + atomic_read(&fcport->state) == FCS_ONLINE) || > + do_delete) { > if (fcport->loop_id != FC_NO_LOOP_ID) { > if (fcport->flags & FCF_FCP2_DEVICE) > fcport->logout_on_delete = 0; > diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c > index fbb80a043b4f..90289162dbd4 100644 > --- a/drivers/scsi/qla2xxx/qla_target.c > +++ b/drivers/scsi/qla2xxx/qla_target.c > @@ -1270,7 +1270,7 @@ void qlt_schedule_sess_for_deletion(struct fc_port *sess) > > qla24xx_chk_fcp_state(sess); > > - ql_dbg(ql_dbg_tgt, sess->vha, 0xe001, > + ql_dbg(ql_dbg_disc, sess->vha, 0xe001, > "Scheduling sess %p for deletion %8phC\n", > sess, sess->port_name); > > -- > 2.19.0.rc0 > Other than small nit. Reviewed-by: Himanshu Madhani <himanshu.madhani@xxxxxxxxxx> -- Himanshu Madhani Oracle Linux Engineering