Message ID | 20220308082048.9774-3-njavali@marvell.com |
---|---|
State | Superseded |
Headers | show |
Series | qla2xxx driver fixes | expand |
> On Mar 8, 2022, at 12:20 AM, Nilesh Javali <njavali@marvell.com> wrote: > > From: Quinn Tran <qutran@marvell.com> > > User experience some of the LUN failed to rediscovered after > long cable pull test. The issue is triggered by a race > condition between driver setting session online state vs upper layer/UL ^^^^^^^^^^^^^ I would just remove “upper layer” in above statement. > starting the LUN scan process at the same time. Current code > set the online state after notifying upper layer the session is > available. In this case, UL was faster on the trigger to start > the LUN scan process before driver could set the session in > online state. LUN scan ends up with failure due to the session > online check was failing. > > Set the online state before reporting to UL > of the availability of the session. > The above 2 lines are redundant with the first paragraph. > Cc: stable@vger.kernel.org > Fixes: aecf043443d3 ("scsi: qla2xxx: Fix Remote port registration") > Signed-off-by: Quinn Tran <qutran@marvell.com> > Signed-off-by: Nilesh Javali <njavali@marvell.com> > --- > drivers/scsi/qla2xxx/qla_init.c | 5 +++-- > drivers/scsi/qla2xxx/qla_nvme.c | 5 +++++ > 2 files changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c > index 835ed4179887..6ffe44b805b6 100644 > --- a/drivers/scsi/qla2xxx/qla_init.c > +++ b/drivers/scsi/qla2xxx/qla_init.c > @@ -5758,6 +5758,8 @@ qla2x00_reg_remote_port(scsi_qla_host_t *vha, fc_port_t *fcport) > if (atomic_read(&fcport->state) == FCS_ONLINE) > return; > > + qla2x00_set_fcport_state(fcport, FCS_ONLINE); > + > rport_ids.node_name = wwn_to_u64(fcport->node_name); > rport_ids.port_name = wwn_to_u64(fcport->port_name); > rport_ids.port_id = fcport->d_id.b.domain << 16 | > @@ -5858,6 +5860,7 @@ qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport) > qla2x00_reg_remote_port(vha, fcport); > break; > case MODE_TARGET: > + qla2x00_set_fcport_state(fcport, FCS_ONLINE); > if (!vha->vha_tgt.qla_tgt->tgt_stop && > !vha->vha_tgt.qla_tgt->tgt_stopped) > qlt_fc_port_added(vha, fcport); > @@ -5875,8 +5878,6 @@ qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport) > 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) { > if (fcport->id_changed) { > fcport->id_changed = 0; > diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c > index 718c761ff5f8..5723082d94d6 100644 > --- a/drivers/scsi/qla2xxx/qla_nvme.c > +++ b/drivers/scsi/qla2xxx/qla_nvme.c > @@ -37,6 +37,11 @@ int qla_nvme_register_remote(struct scsi_qla_host *vha, struct fc_port *fcport) > (fcport->nvme_flag & NVME_FLAG_REGISTERED)) > return 0; > > + if (atomic_read(&fcport->state) == FCS_ONLINE) > + return 0; > + > + qla2x00_set_fcport_state(fcport, FCS_ONLINE); > + > fcport->nvme_flag &= ~NVME_FLAG_RESETTING; > > memset(&req, 0, sizeof(struct nvme_fc_port_info)); > -- > 2.19.0.rc0 > Patch itself looks good. After fixing commit message you can add Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com> -- Himanshu Madhani Oracle Linux Engineering
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 835ed4179887..6ffe44b805b6 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -5758,6 +5758,8 @@ qla2x00_reg_remote_port(scsi_qla_host_t *vha, fc_port_t *fcport) if (atomic_read(&fcport->state) == FCS_ONLINE) return; + qla2x00_set_fcport_state(fcport, FCS_ONLINE); + rport_ids.node_name = wwn_to_u64(fcport->node_name); rport_ids.port_name = wwn_to_u64(fcport->port_name); rport_ids.port_id = fcport->d_id.b.domain << 16 | @@ -5858,6 +5860,7 @@ qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport) qla2x00_reg_remote_port(vha, fcport); break; case MODE_TARGET: + qla2x00_set_fcport_state(fcport, FCS_ONLINE); if (!vha->vha_tgt.qla_tgt->tgt_stop && !vha->vha_tgt.qla_tgt->tgt_stopped) qlt_fc_port_added(vha, fcport); @@ -5875,8 +5878,6 @@ qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport) 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) { if (fcport->id_changed) { fcport->id_changed = 0; diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c index 718c761ff5f8..5723082d94d6 100644 --- a/drivers/scsi/qla2xxx/qla_nvme.c +++ b/drivers/scsi/qla2xxx/qla_nvme.c @@ -37,6 +37,11 @@ int qla_nvme_register_remote(struct scsi_qla_host *vha, struct fc_port *fcport) (fcport->nvme_flag & NVME_FLAG_REGISTERED)) return 0; + if (atomic_read(&fcport->state) == FCS_ONLINE) + return 0; + + qla2x00_set_fcport_state(fcport, FCS_ONLINE); + fcport->nvme_flag &= ~NVME_FLAG_RESETTING; memset(&req, 0, sizeof(struct nvme_fc_port_info));