scsi: qla2xxx: Fix device reconnect in loop topology
commit 8ad4be3d15 upstream.
A device logout in loop topology initiates a device connection teardown
which loses the FW device handle. In loop topo, the device handle is not
regrabbed leading to device login failures and eventually to loss of the
device. Fix this by taking the main login path that does it.
Link: https://lore.kernel.org/r/20220110050218.3958-11-njavali@marvell.com
Cc: stable@vger.kernel.org
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Arun Easi <aeasi@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
8b52e20c22
commit
bad77c9a47
2 changed files with 20 additions and 0 deletions
|
|
@ -953,6 +953,9 @@ static void qla24xx_handle_gnl_done_event(scsi_qla_host_t *vha,
|
|||
set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
|
||||
}
|
||||
break;
|
||||
case ISP_CFG_NL:
|
||||
qla24xx_fcport_handle_login(vha, fcport);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -1480,6 +1483,11 @@ static void qla_chk_n2n_b4_login(struct scsi_qla_host *vha, fc_port_t *fcport)
|
|||
u8 login = 0;
|
||||
int rc;
|
||||
|
||||
ql_dbg(ql_dbg_disc, vha, 0x307b,
|
||||
"%s %8phC DS %d LS %d lid %d retries=%d\n",
|
||||
__func__, fcport->port_name, fcport->disc_state,
|
||||
fcport->fw_login_state, fcport->loop_id, fcport->login_retry);
|
||||
|
||||
if (qla_tgt_mode_enabled(vha))
|
||||
return;
|
||||
|
||||
|
|
@ -5377,6 +5385,13 @@ qla2x00_configure_local_loop(scsi_qla_host_t *vha)
|
|||
memcpy(fcport->node_name, new_fcport->node_name,
|
||||
WWN_SIZE);
|
||||
fcport->scan_state = QLA_FCPORT_FOUND;
|
||||
if (fcport->login_retry == 0) {
|
||||
fcport->login_retry = vha->hw->login_retry_count;
|
||||
ql_dbg(ql_dbg_disc, vha, 0x2135,
|
||||
"Port login retry %8phN, lid 0x%04x retry cnt=%d.\n",
|
||||
fcport->port_name, fcport->loop_id,
|
||||
fcport->login_retry);
|
||||
}
|
||||
found++;
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5390,6 +5390,11 @@ void qla2x00_relogin(struct scsi_qla_host *vha)
|
|||
memset(&ea, 0, sizeof(ea));
|
||||
ea.fcport = fcport;
|
||||
qla24xx_handle_relogin_event(vha, &ea);
|
||||
} else if (vha->hw->current_topology ==
|
||||
ISP_CFG_NL &&
|
||||
IS_QLA2XXX_MIDTYPE(vha->hw)) {
|
||||
(void)qla24xx_fcport_handle_login(vha,
|
||||
fcport);
|
||||
} else if (vha->hw->current_topology ==
|
||||
ISP_CFG_NL) {
|
||||
fcport->login_retry--;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue