Skip to content

Commit abb31ae

Browse files
Quinn Tranmartinkpetersen
authored andcommitted
scsi: qla2xxx: Fix login timeout
Multipath errors were seen during failback due to login timeout. The remote device sent LOGO, the local host tore 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. Link: https://lore.kernel.org/r/[email protected] Reviewed-by: Himanshu Madhani <[email protected]> Signed-off-by: Quinn Tran <[email protected]> Signed-off-by: Nilesh Javali <[email protected]> Signed-off-by: Martin K. Petersen <[email protected]>
1 parent 4709272 commit abb31ae

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

drivers/scsi/qla2xxx/qla_gs.c

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3538,10 +3538,22 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, srb_t *sp)
35383538
}
35393539

35403540
if (fcport->scan_state != QLA_FCPORT_FOUND) {
3541+
bool do_delete = false;
3542+
3543+
if (fcport->scan_needed &&
3544+
fcport->disc_state == DSC_LOGIN_PEND) {
3545+
/* Cable got disconnected after we sent
3546+
* a login. Do delete to prevent timeout.
3547+
*/
3548+
fcport->logout_on_delete = 1;
3549+
do_delete = true;
3550+
}
3551+
35413552
fcport->scan_needed = 0;
3542-
if ((qla_dual_mode_enabled(vha) ||
3543-
qla_ini_mode_enabled(vha)) &&
3544-
atomic_read(&fcport->state) == FCS_ONLINE) {
3553+
if (((qla_dual_mode_enabled(vha) ||
3554+
qla_ini_mode_enabled(vha)) &&
3555+
atomic_read(&fcport->state) == FCS_ONLINE) ||
3556+
do_delete) {
35453557
if (fcport->loop_id != FC_NO_LOOP_ID) {
35463558
if (fcport->flags & FCF_FCP2_DEVICE)
35473559
fcport->logout_on_delete = 0;

drivers/scsi/qla2xxx/qla_target.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1270,7 +1270,7 @@ void qlt_schedule_sess_for_deletion(struct fc_port *sess)
12701270

12711271
qla24xx_chk_fcp_state(sess);
12721272

1273-
ql_dbg(ql_dbg_tgt, sess->vha, 0xe001,
1273+
ql_dbg(ql_dbg_disc, sess->vha, 0xe001,
12741274
"Scheduling sess %p for deletion %8phC\n",
12751275
sess, sess->port_name);
12761276

0 commit comments

Comments
 (0)