lkml.org 
[lkml]   [2019]   [Nov]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.19 147/205] scsi: lpfc: Fix GFT_ID and PRLI logic for RSCN
    Date
    From: James Smart <jsmart2021@gmail.com>

    [ Upstream commit 01a8aed6a009625282b6265880f6b20cbd7a9c70 ]

    Driver only sends NVME PRLI to a device that also supports FCP. This resuls
    in remote ports that don't have fc_remote_ports created for them. The driver
    is clearing the nlp_fc4_type for a ndlp at the wrong time.

    Fix by moving the nlp_fc4_type clearing to the discovery engine in the
    DEVICE_RECOVERY state. Also ensure that rport registration is done for all
    nlp_fc4_types.

    Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
    Signed-off-by: James Smart <james.smart@broadcom.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/scsi/lpfc/lpfc_ct.c | 5 -----
    drivers/scsi/lpfc/lpfc_hbadisc.c | 2 +-
    drivers/scsi/lpfc/lpfc_nportdisc.c | 3 +++
    3 files changed, 4 insertions(+), 6 deletions(-)

    diff --git a/drivers/scsi/lpfc/lpfc_ct.c b/drivers/scsi/lpfc/lpfc_ct.c
    index d909d90035bb2..384f5cd7c3c81 100644
    --- a/drivers/scsi/lpfc/lpfc_ct.c
    +++ b/drivers/scsi/lpfc/lpfc_ct.c
    @@ -471,11 +471,6 @@ lpfc_prep_node_fc4type(struct lpfc_vport *vport, uint32_t Did, uint8_t fc4_type)
    "Parse GID_FTrsp: did:x%x flg:x%x x%x",
    Did, ndlp->nlp_flag, vport->fc_flag);

    - /* Don't assume the rport is always the previous
    - * FC4 type.
    - */
    - ndlp->nlp_fc4_type &= ~(NLP_FC4_FCP | NLP_FC4_NVME);
    -
    /* By default, the driver expects to support FCP FC4 */
    if (fc4_type == FC_TYPE_FCP)
    ndlp->nlp_fc4_type |= NLP_FC4_FCP;
    diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
    index ccdd82b1123f7..db183d1f34ab2 100644
    --- a/drivers/scsi/lpfc/lpfc_hbadisc.c
    +++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
    @@ -4198,7 +4198,7 @@ lpfc_nlp_state_cleanup(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,

    if (new_state == NLP_STE_MAPPED_NODE ||
    new_state == NLP_STE_UNMAPPED_NODE) {
    - if (ndlp->nlp_fc4_type & NLP_FC4_FCP ||
    + if (ndlp->nlp_fc4_type ||
    ndlp->nlp_DID == Fabric_DID ||
    ndlp->nlp_DID == NameServer_DID ||
    ndlp->nlp_DID == FDMI_DID) {
    diff --git a/drivers/scsi/lpfc/lpfc_nportdisc.c b/drivers/scsi/lpfc/lpfc_nportdisc.c
    index a6619fd8238c1..394ffbe9cb6d7 100644
    --- a/drivers/scsi/lpfc/lpfc_nportdisc.c
    +++ b/drivers/scsi/lpfc/lpfc_nportdisc.c
    @@ -2323,6 +2323,7 @@ lpfc_device_recov_unmap_node(struct lpfc_vport *vport,
    lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
    spin_lock_irq(shost->host_lock);
    ndlp->nlp_flag &= ~(NLP_NODEV_REMOVE | NLP_NPR_2B_DISC);
    + ndlp->nlp_fc4_type &= ~(NLP_FC4_FCP | NLP_FC4_NVME);
    spin_unlock_irq(shost->host_lock);
    lpfc_disc_set_adisc(vport, ndlp);

    @@ -2400,6 +2401,7 @@ lpfc_device_recov_mapped_node(struct lpfc_vport *vport,
    lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
    spin_lock_irq(shost->host_lock);
    ndlp->nlp_flag &= ~(NLP_NODEV_REMOVE | NLP_NPR_2B_DISC);
    + ndlp->nlp_fc4_type &= ~(NLP_FC4_FCP | NLP_FC4_NVME);
    spin_unlock_irq(shost->host_lock);
    lpfc_disc_set_adisc(vport, ndlp);
    return ndlp->nlp_state;
    @@ -2657,6 +2659,7 @@ lpfc_device_recov_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
    lpfc_cancel_retry_delay_tmo(vport, ndlp);
    spin_lock_irq(shost->host_lock);
    ndlp->nlp_flag &= ~(NLP_NODEV_REMOVE | NLP_NPR_2B_DISC);
    + ndlp->nlp_fc4_type &= ~(NLP_FC4_FCP | NLP_FC4_NVME);
    spin_unlock_irq(shost->host_lock);
    return ndlp->nlp_state;
    }
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-11-08 13:06    [W:4.142 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site