lkml.org 
[lkml]   [2022]   [Apr]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 321/475] scsi: qla2xxx: Fix disk failure to rediscover
    Date
    From: Quinn Tran <qutran@marvell.com>

    commit 6a45c8e137d4e2c72eecf1ac7cf64f2fdfcead99 upstream.

    User experienced some of the LUN failed to get rediscovered after long
    cable pull test. The issue is triggered by a race condition between driver
    setting session online state vs starting the LUN scan process at the same
    time. Current code set the online state after notifying the session is
    available. In this case, trigger to start the LUN scan process happened
    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 of the availability of the session.

    Link: https://lore.kernel.org/r/20220310092604.22950-3-njavali@marvell.com
    Fixes: aecf043443d3 ("scsi: qla2xxx: Fix Remote port registration")
    Cc: stable@vger.kernel.org
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Quinn Tran <qutran@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>
    ---
    drivers/scsi/qla2xxx/qla_init.c | 5 +++--
    drivers/scsi/qla2xxx/qla_nvme.c | 5 +++++
    2 files changed, 8 insertions(+), 2 deletions(-)

    --- a/drivers/scsi/qla2xxx/qla_init.c
    +++ b/drivers/scsi/qla2xxx/qla_init.c
    @@ -5372,6 +5372,8 @@ qla2x00_reg_remote_port(scsi_qla_host_t
    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 |
    @@ -5467,6 +5469,7 @@ qla2x00_update_fcport(scsi_qla_host_t *v
    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);
    @@ -5481,8 +5484,6 @@ qla2x00_update_fcport(scsi_qla_host_t *v
    break;
    }

    - 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;
    --- a/drivers/scsi/qla2xxx/qla_nvme.c
    +++ b/drivers/scsi/qla2xxx/qla_nvme.c
    @@ -36,6 +36,11 @@ int qla_nvme_register_remote(struct scsi
    (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));

    \
     
     \ /
      Last update: 2022-04-14 17:08    [W:2.720 / U:0.352 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site