mirror of
https://github.com/SCST-project/scst.git
synced 2026-05-17 02:31:27 +00:00
qla2x00t-32gbit: Handle aborts correctly for port undergoing deletion
Call trace observed while shutting down the adapter ports (LINK DOWN). Handle aborts correctly. localhost kernel: INFO: task nvme:44209 blocked for more than 120 seconds. localhost kernel: "echo 0 >/proc/sys/kernel/hung_task_timeout_secs" disables this message. localhost kernel: nvme D ffff88b45fb5acc0 0 44209 1 0x00000080 localhost kernel: Call Trace: localhost kernel: [<ffffffffbd187169>] schedule+0x29/0x70 localhost kernel: [<ffffffffbd184c51>] schedule_timeout+0x221/0x2d0 localhost kernel: [<ffffffffbcad7229>] ? ttwu_do_wakeup+0x19/0xe0 localhost kernel: [<ffffffffbcad735f>] ? ttwu_do_activate+0x6f/0x80 localhost kernel: [<ffffffffbcada830>] ? try_to_wake_up+0x190/0x390 localhost kernel: [<ffffffffbd18751d>] wait_for_completion+0xfd/0x140 localhost kernel: [<ffffffffbcadaaf0>] ? wake_up_state+0x20/0x20 localhost kernel: [<ffffffffbcabe3da>] flush_work+0x10a/0x1b0 localhost kernel: [<ffffffffbcabb0f0>] ? move_linked_works+0x90/0x90 localhost kernel: [<ffffffffbcabe6cf>] flush_delayed_work+0x3f/0x50 localhost kernel: [<ffffffffc0452767>] nvme_fc_init_ctrl+0x657/0x6a0 [nvme_fc] localhost kernel: [<ffffffffc045293a>] nvme_fc_create_ctrl+0x18a/0x210 [nvme_fc] localhost kernel: [<ffffffffc028962f>] nvmf_dev_write+0x98f/0xb35 [nvme_fabrics] localhost kernel: [<ffffffffbcd08927>] ? security_file_permission+0x27/0xa0 localhost kernel: [<ffffffffbcc4db50>] vfs_write+0xc0/0x1f0 localhost kernel: [<ffffffffbcc4e92f>] SyS_write+0x7f/0xf0 localhost kernel: [<ffffffffbd193f92>] system_call_fastpath+0x25/0x2a Link: https://lore.kernel.org/r/20201202132312.19966-11-njavali@marvell.com Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com> Signed-off-by: Saurav Kashyap <skashyap@marvell.com> Signed-off-by: Nilesh Javali <njavali@marvell.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> See also upstream commit f795f96e725b472de59db06a21a23e2285faaf14. git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@9297 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
@@ -1268,9 +1268,10 @@ qla24xx_async_prli(struct scsi_qla_host *vha, fc_port_t *fcport)
|
||||
lio->u.logio.flags |= SRB_LOGIN_NVME_PRLI;
|
||||
|
||||
ql_dbg(ql_dbg_disc, vha, 0x211b,
|
||||
"Async-prli - %8phC hdl=%x, loopid=%x portid=%06x retries=%d %s.\n",
|
||||
"Async-prli - %8phC hdl=%x, loopid=%x portid=%06x retries=%d fc4type %x priority %x %s.\n",
|
||||
fcport->port_name, sp->handle, fcport->loop_id, fcport->d_id.b24,
|
||||
fcport->login_retry, NVME_TARGET(vha->hw, fcport) ? "nvme" : "fc");
|
||||
fcport->login_retry, fcport->fc4_type, vha->hw->fc4_type_priority,
|
||||
NVME_TARGET(vha->hw, fcport) ? "nvme" : "fcp");
|
||||
|
||||
rval = qla2x00_start_sp(sp);
|
||||
if (rval != QLA_SUCCESS) {
|
||||
@@ -1932,26 +1933,58 @@ qla24xx_handle_prli_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Retry PRLI with other FC-4 type if failure occurred on dual
|
||||
* FCP/NVMe port
|
||||
*/
|
||||
if (NVME_FCP_TARGET(ea->fcport)) {
|
||||
ql_dbg(ql_dbg_disc, vha, 0x2118,
|
||||
"%s %d %8phC post %s prli\n",
|
||||
__func__, __LINE__, ea->fcport->port_name,
|
||||
(ea->fcport->fc4_type & FS_FC4TYPE_NVME) ?
|
||||
"NVMe" : "FCP");
|
||||
if (vha->hw->fc4_type_priority == FC4_PRIORITY_NVME)
|
||||
ea->fcport->fc4_type &= ~FS_FC4TYPE_NVME;
|
||||
else
|
||||
ea->fcport->fc4_type &= ~FS_FC4TYPE_FCP;
|
||||
}
|
||||
ql_dbg(ql_dbg_disc, vha, 0x2118,
|
||||
"%s %d %8phC priority %s, fc4type %x\n",
|
||||
__func__, __LINE__, ea->fcport->port_name,
|
||||
vha->hw->fc4_type_priority == FC4_PRIORITY_FCP ?
|
||||
"FCP" : "NVMe", ea->fcport->fc4_type);
|
||||
|
||||
ea->fcport->flags &= ~FCF_ASYNC_SENT;
|
||||
ea->fcport->keep_nport_handle = 0;
|
||||
ea->fcport->logout_on_delete = 1;
|
||||
qlt_schedule_sess_for_deletion(ea->fcport);
|
||||
if (N2N_TOPO(vha->hw)) {
|
||||
if (vha->hw->fc4_type_priority == FC4_PRIORITY_NVME) {
|
||||
ea->fcport->fc4_type &= ~FS_FC4TYPE_NVME;
|
||||
ea->fcport->fc4_type |= FS_FC4TYPE_FCP;
|
||||
} else {
|
||||
ea->fcport->fc4_type &= ~FS_FC4TYPE_FCP;
|
||||
ea->fcport->fc4_type |= FS_FC4TYPE_NVME;
|
||||
}
|
||||
|
||||
if (ea->fcport->n2n_link_reset_cnt < 3) {
|
||||
ea->fcport->n2n_link_reset_cnt++;
|
||||
vha->relogin_jif = jiffies + 2 * HZ;
|
||||
/*
|
||||
* PRLI failed. Reset link to kick start
|
||||
* state machine
|
||||
*/
|
||||
set_bit(N2N_LINK_RESET, &vha->dpc_flags);
|
||||
} else {
|
||||
ql_log(ql_log_warn, vha, 0x2119,
|
||||
"%s %d %8phC Unable to reconnect\n",
|
||||
__func__, __LINE__,
|
||||
ea->fcport->port_name);
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* switch connect. login failed. Take connection down
|
||||
* and allow relogin to retrigger
|
||||
*/
|
||||
if (NVME_FCP_TARGET(ea->fcport)) {
|
||||
ql_dbg(ql_dbg_disc, vha, 0x2118,
|
||||
"%s %d %8phC post %s prli\n",
|
||||
__func__, __LINE__,
|
||||
ea->fcport->port_name,
|
||||
(ea->fcport->fc4_type & FS_FC4TYPE_NVME)
|
||||
? "NVMe" : "FCP");
|
||||
if (vha->hw->fc4_type_priority == FC4_PRIORITY_NVME)
|
||||
ea->fcport->fc4_type &= ~FS_FC4TYPE_NVME;
|
||||
else
|
||||
ea->fcport->fc4_type &= ~FS_FC4TYPE_FCP;
|
||||
}
|
||||
|
||||
ea->fcport->flags &= ~FCF_ASYNC_SENT;
|
||||
ea->fcport->keep_nport_handle = 0;
|
||||
ea->fcport->logout_on_delete = 1;
|
||||
qlt_schedule_sess_for_deletion(ea->fcport);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1129,7 +1129,7 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha)
|
||||
if (ha->flags.scm_supported_a &&
|
||||
(ha->fw_attributes_ext[0] & FW_ATTR_EXT0_SCM_SUPPORTED)) {
|
||||
ha->flags.scm_supported_f = 1;
|
||||
ha->sf_init_cb->flags |= BIT_13;
|
||||
ha->sf_init_cb->flags |= cpu_to_le16(BIT_13);
|
||||
}
|
||||
ql_log(ql_log_info, vha, 0x11a3, "SCM in FW: %s\n",
|
||||
(ha->flags.scm_supported_f) ? "Supported" :
|
||||
@@ -1137,9 +1137,9 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha)
|
||||
|
||||
if (vha->flags.nvme2_enabled) {
|
||||
/* set BIT_15 of special feature control block for SLER */
|
||||
ha->sf_init_cb->flags |= BIT_15;
|
||||
ha->sf_init_cb->flags |= cpu_to_le16(BIT_15);
|
||||
/* set BIT_14 of special feature control block for PI CTRL*/
|
||||
ha->sf_init_cb->flags |= BIT_14;
|
||||
ha->sf_init_cb->flags |= cpu_to_le16(BIT_14);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3998,9 +3998,6 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
|
||||
fcport->scan_state = QLA_FCPORT_FOUND;
|
||||
fcport->n2n_flag = 1;
|
||||
fcport->keep_nport_handle = 1;
|
||||
fcport->fc4_type = FS_FC4TYPE_FCP;
|
||||
if (vha->flags.nvme_enabled)
|
||||
fcport->fc4_type |= FS_FC4TYPE_NVME;
|
||||
|
||||
if (wwn_to_u64(vha->port_name) >
|
||||
wwn_to_u64(fcport->port_name)) {
|
||||
|
||||
@@ -240,7 +240,7 @@ static void qla_nvme_abort_work(struct work_struct *work)
|
||||
"%s called for sp=%p, hndl=%x on fcport=%p deleted=%d\n",
|
||||
__func__, sp, sp->handle, fcport, fcport->deleted);
|
||||
|
||||
if (!ha->flags.fw_started && fcport->deleted)
|
||||
if (!ha->flags.fw_started || fcport->deleted)
|
||||
goto out;
|
||||
|
||||
if (ha->flags.host_shutting_down) {
|
||||
|
||||
Reference in New Issue
Block a user