Message ID | 20211214111139.52503-1-dwagner@suse.de (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | [v3] qla2xxx: synchronize rport dev_loss_tmo setting | expand |
> On Dec 14, 2021, at 5:11 AM, Daniel Wagner <dwagner@suse.de> wrote: > > From: Hannes Reinecke <hare@suse.de> > > Currently, the dev_loss_tmo setting is only ever used for SCSI > devices. This patch reshuffles initialisation such that the SCSI > remote ports are registered before the NVMe ones, allowing the > dev_loss_tmo setting to be synchronized between SCSI and NVMe. > > Signed-off-by: Hannes Reinecke <hare@suse.de> > Signed-off-by: Daniel Wagner <dwagner@suse.de> > --- > We have this patch in our kernels for a while and it works > fine. > > v3: > - added additional check if fcport pointer is valid in > qla2x00_set_rport_loss_tmo (crash reported) > > v2: > - https://lore.kernel.org/linux-scsi/20210702092052.93202-1-dwagner@suse.de/ > - fixed build failure for !NVME_FC reported by lkp > > v1: > - https://lore.kernel.org/linux-scsi/20210609094956.11286-1-dwagner@suse.de/ > - initial version > > drivers/scsi/qla2xxx/qla_attr.c | 6 ++++++ > drivers/scsi/qla2xxx/qla_init.c | 10 +++------- > drivers/scsi/qla2xxx/qla_nvme.c | 5 ++++- > 3 files changed, 13 insertions(+), 8 deletions(-) > > diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c > index 032efb294ee5..db55737000ab 100644 > --- a/drivers/scsi/qla2xxx/qla_attr.c > +++ b/drivers/scsi/qla2xxx/qla_attr.c > @@ -2700,7 +2700,13 @@ qla2x00_get_starget_port_id(struct scsi_target *starget) > static inline void > qla2x00_set_rport_loss_tmo(struct fc_rport *rport, uint32_t timeout) > { > + fc_port_t *fcport = *(fc_port_t **)rport->dd_data; > + > rport->dev_loss_tmo = timeout ? timeout : 1; > + > + if (IS_ENABLED(CONFIG_NVME_FC) && fcport && fcport->nvme_remote_port) > + nvme_fc_set_remoteport_devloss(fcport->nvme_remote_port, > + rport->dev_loss_tmo); > } > > static void > diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c > index 070b636802d0..1fe4966fc2f6 100644 > --- a/drivers/scsi/qla2xxx/qla_init.c > +++ b/drivers/scsi/qla2xxx/qla_init.c > @@ -5828,13 +5828,6 @@ qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport) > > qla2x00_dfs_create_rport(vha, fcport); > > - if (NVME_TARGET(vha->hw, fcport)) { > - qla_nvme_register_remote(vha, fcport); > - qla2x00_set_fcport_disc_state(fcport, DSC_LOGIN_COMPLETE); > - qla2x00_set_fcport_state(fcport, FCS_ONLINE); > - return; > - } > - > qla24xx_update_fcport_fcp_prio(vha, fcport); > > switch (vha->host->active_mode) { > @@ -5856,6 +5849,9 @@ qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport) > break; > } > > + if (NVME_TARGET(vha->hw, fcport)) > + qla_nvme_register_remote(vha, fcport); > + > qla2x00_set_fcport_state(fcport, FCS_ONLINE); > > if (IS_IIDMA_CAPABLE(vha->hw) && vha->hw->flags.gpsc_supported) { > diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c > index 138ffdb5c92c..e22ec7cb65db 100644 > --- a/drivers/scsi/qla2xxx/qla_nvme.c > +++ b/drivers/scsi/qla2xxx/qla_nvme.c > @@ -43,7 +43,7 @@ int qla_nvme_register_remote(struct scsi_qla_host *vha, struct fc_port *fcport) > req.port_name = wwn_to_u64(fcport->port_name); > req.node_name = wwn_to_u64(fcport->node_name); > req.port_role = 0; > - req.dev_loss_tmo = 0; > + req.dev_loss_tmo = fcport->dev_loss_tmo; > > if (fcport->nvme_prli_service_param & NVME_PRLI_SP_INITIATOR) > req.port_role = FC_PORT_ROLE_NVME_INITIATOR; > @@ -70,6 +70,9 @@ int qla_nvme_register_remote(struct scsi_qla_host *vha, struct fc_port *fcport) > return ret; > } > > + nvme_fc_set_remoteport_devloss(fcport->nvme_remote_port, > + fcport->dev_loss_tmo); > + > if (fcport->nvme_prli_service_param & NVME_PRLI_SP_SLER) > ql_log(ql_log_info, vha, 0x212a, > "PortID:%06x Supports SLER\n", req.port_id); > -- > 2.29.2 > Looks Good. Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com> -- Himanshu Madhani Oracle Linux Engineering
Daniel, > Currently, the dev_loss_tmo setting is only ever used for SCSI > devices. This patch reshuffles initialisation such that the SCSI > remote ports are registered before the NVMe ones, allowing the > dev_loss_tmo setting to be synchronized between SCSI and NVMe. Applied to 5.17/scsi-staging, thanks!
On Tue, 14 Dec 2021 12:11:39 +0100, Daniel Wagner wrote: > From: Hannes Reinecke <hare@suse.de> > > Currently, the dev_loss_tmo setting is only ever used for SCSI > devices. This patch reshuffles initialisation such that the SCSI > remote ports are registered before the NVMe ones, allowing the > dev_loss_tmo setting to be synchronized between SCSI and NVMe. > > [...] Applied to 5.17/scsi-queue, thanks! [1/1] qla2xxx: synchronize rport dev_loss_tmo setting https://git.kernel.org/mkp/scsi/c/baea0e833f76
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index 032efb294ee5..db55737000ab 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c @@ -2700,7 +2700,13 @@ qla2x00_get_starget_port_id(struct scsi_target *starget) static inline void qla2x00_set_rport_loss_tmo(struct fc_rport *rport, uint32_t timeout) { + fc_port_t *fcport = *(fc_port_t **)rport->dd_data; + rport->dev_loss_tmo = timeout ? timeout : 1; + + if (IS_ENABLED(CONFIG_NVME_FC) && fcport && fcport->nvme_remote_port) + nvme_fc_set_remoteport_devloss(fcport->nvme_remote_port, + rport->dev_loss_tmo); } static void diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 070b636802d0..1fe4966fc2f6 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -5828,13 +5828,6 @@ qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport) qla2x00_dfs_create_rport(vha, fcport); - if (NVME_TARGET(vha->hw, fcport)) { - qla_nvme_register_remote(vha, fcport); - qla2x00_set_fcport_disc_state(fcport, DSC_LOGIN_COMPLETE); - qla2x00_set_fcport_state(fcport, FCS_ONLINE); - return; - } - qla24xx_update_fcport_fcp_prio(vha, fcport); switch (vha->host->active_mode) { @@ -5856,6 +5849,9 @@ qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport) break; } + if (NVME_TARGET(vha->hw, fcport)) + qla_nvme_register_remote(vha, fcport); + qla2x00_set_fcport_state(fcport, FCS_ONLINE); if (IS_IIDMA_CAPABLE(vha->hw) && vha->hw->flags.gpsc_supported) { diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c index 138ffdb5c92c..e22ec7cb65db 100644 --- a/drivers/scsi/qla2xxx/qla_nvme.c +++ b/drivers/scsi/qla2xxx/qla_nvme.c @@ -43,7 +43,7 @@ int qla_nvme_register_remote(struct scsi_qla_host *vha, struct fc_port *fcport) req.port_name = wwn_to_u64(fcport->port_name); req.node_name = wwn_to_u64(fcport->node_name); req.port_role = 0; - req.dev_loss_tmo = 0; + req.dev_loss_tmo = fcport->dev_loss_tmo; if (fcport->nvme_prli_service_param & NVME_PRLI_SP_INITIATOR) req.port_role = FC_PORT_ROLE_NVME_INITIATOR; @@ -70,6 +70,9 @@ int qla_nvme_register_remote(struct scsi_qla_host *vha, struct fc_port *fcport) return ret; } + nvme_fc_set_remoteport_devloss(fcport->nvme_remote_port, + fcport->dev_loss_tmo); + if (fcport->nvme_prli_service_param & NVME_PRLI_SP_SLER) ql_log(ql_log_info, vha, 0x212a, "PortID:%06x Supports SLER\n", req.port_id);