From: Himanshu Madhani <himanshu.madhani@oracle.com>
To: Justin Tee <justintee8345@gmail.com>, linux-scsi@vger.kernel.org
Cc: jsmart2021@gmail.com, justin.tee@broadcom.com
Subject: Re: [PATCH 05/17] lpfc: Allow lpfc_plogi_confirm_nport logic to execute for Fabric nodes
Date: Tue, 30 Jan 2024 18:36:54 -0800 [thread overview]
Message-ID: <81e436d2-9f42-48bd-a7ee-903893cb7334@oracle.com> (raw)
In-Reply-To: <20240131003549.147784-6-justintee8345@gmail.com>
On 1/30/24 16:35, Justin Tee wrote:
> Remove the early return NLP_FABRIC check in lpfc_plogi_confirm_nport
> because it is possible for switch domain controllers to change WWPN.
>
> As a result, allow lpfc_plogi_confirm_nport to detect that a new ndlp
> should be initialized in such cases. The old ndlp object will be cleaned
> up when dev_loss_tmo callbk executes.
>
> Signed-off-by: Justin Tee <justin.tee@broadcom.com>
> ---
> drivers/scsi/lpfc/lpfc_els.c | 49 +++++++++++++++++++++++-------------
> 1 file changed, 32 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
> index 4d723200690a..a17c66e31637 100644
> --- a/drivers/scsi/lpfc/lpfc_els.c
> +++ b/drivers/scsi/lpfc/lpfc_els.c
> @@ -1696,18 +1696,13 @@ lpfc_plogi_confirm_nport(struct lpfc_hba *phba, uint32_t *prsp,
> struct serv_parm *sp;
> uint8_t name[sizeof(struct lpfc_name)];
> uint32_t keepDID = 0, keep_nlp_flag = 0;
> + int rc;
> uint32_t keep_new_nlp_flag = 0;
> uint16_t keep_nlp_state;
> u32 keep_nlp_fc4_type = 0;
> struct lpfc_nvme_rport *keep_nrport = NULL;
> unsigned long *active_rrqs_xri_bitmap = NULL;
>
> - /* Fabric nodes can have the same WWPN so we don't bother searching
> - * by WWPN. Just return the ndlp that was given to us.
> - */
> - if (ndlp->nlp_type & NLP_FABRIC)
> - return ndlp;
> -
> sp = (struct serv_parm *) ((uint8_t *) prsp + sizeof(uint32_t));
> memset(name, 0, sizeof(struct lpfc_name));
>
> @@ -1717,15 +1712,9 @@ lpfc_plogi_confirm_nport(struct lpfc_hba *phba, uint32_t *prsp,
> new_ndlp = lpfc_findnode_wwpn(vport, &sp->portName);
>
> /* return immediately if the WWPN matches ndlp */
> - if (!new_ndlp || (new_ndlp == ndlp))
> + if (new_ndlp == ndlp)
> return ndlp;
>
> - /*
> - * Unregister from backend if not done yet. Could have been skipped
> - * due to ADISC
> - */
> - lpfc_nlp_unreg_node(vport, new_ndlp);
> -
> if (phba->sli_rev == LPFC_SLI_REV4) {
> active_rrqs_xri_bitmap = mempool_alloc(phba->active_rrq_pool,
> GFP_KERNEL);
> @@ -1742,11 +1731,37 @@ lpfc_plogi_confirm_nport(struct lpfc_hba *phba, uint32_t *prsp,
> (new_ndlp ? new_ndlp->nlp_flag : 0),
> (new_ndlp ? new_ndlp->nlp_fc4_type : 0));
>
> - keepDID = new_ndlp->nlp_DID;
> + if (!new_ndlp) {
> + rc = memcmp(&ndlp->nlp_portname, name,
> + sizeof(struct lpfc_name));
> + if (!rc) {
> + if (active_rrqs_xri_bitmap)
> + mempool_free(active_rrqs_xri_bitmap,
> + phba->active_rrq_pool);
> + return ndlp;
> + }
> + new_ndlp = lpfc_nlp_init(vport, ndlp->nlp_DID);
> + if (!new_ndlp) {
> + if (active_rrqs_xri_bitmap)
> + mempool_free(active_rrqs_xri_bitmap,
> + phba->active_rrq_pool);
> + return ndlp;
> + }
> + } else {
> + if (phba->sli_rev == LPFC_SLI_REV4 &&
> + active_rrqs_xri_bitmap)
> + memcpy(active_rrqs_xri_bitmap,
> + new_ndlp->active_rrqs_xri_bitmap,
> + phba->cfg_rrq_xri_bitmap_sz);
>
> - if (phba->sli_rev == LPFC_SLI_REV4 && active_rrqs_xri_bitmap)
> - memcpy(active_rrqs_xri_bitmap, new_ndlp->active_rrqs_xri_bitmap,
> - phba->cfg_rrq_xri_bitmap_sz);
> + /*
> + * Unregister from backend if not done yet. Could have been
> + * skipped due to ADISC
> + */
> + lpfc_nlp_unreg_node(vport, new_ndlp);
> + }
> +
> + keepDID = new_ndlp->nlp_DID;
>
> /* At this point in this routine, we know new_ndlp will be
> * returned. however, any previous GID_FTs that were done
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
--
Himanshu Madhani Oracle Linux Engineering
next prev parent reply other threads:[~2024-01-31 2:37 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-31 0:35 [PATCH 00/17] lpfc: Update lpfc to revision 14.4.0.0 Justin Tee
2024-01-31 0:35 ` [PATCH 01/17] lpfc: Initialize status local variable in lpfc_sli4_repost_sgl_list Justin Tee
2024-01-31 2:35 ` Himanshu Madhani
2024-01-31 0:35 ` [PATCH 02/17] lpfc: Fix possible memory leak in lpfc_rcv_padisc Justin Tee
2024-01-31 2:35 ` Himanshu Madhani
2024-01-31 0:35 ` [PATCH 03/17] lpfc: Use sg_dma_len API to get struct scatterlist's length Justin Tee
2024-01-31 2:36 ` Himanshu Madhani
2024-01-31 0:35 ` [PATCH 04/17] lpfc: Remove D_ID swap log message from trace event logger Justin Tee
2024-01-31 2:36 ` Himanshu Madhani
2024-01-31 0:35 ` [PATCH 05/17] lpfc: Allow lpfc_plogi_confirm_nport logic to execute for Fabric nodes Justin Tee
2024-01-31 2:36 ` Himanshu Madhani [this message]
2024-01-31 0:35 ` [PATCH 06/17] lpfc: Remove NLP_RCV_PLOGI early return during RSCN processing for ndlps Justin Tee
2024-01-31 2:37 ` Himanshu Madhani
2024-01-31 0:35 ` [PATCH 07/17] lpfc: Fix failure to delete vports when discovery is in progress Justin Tee
2024-01-31 2:37 ` Himanshu Madhani
2024-01-31 0:35 ` [PATCH 08/17] lpfc: Add condition to delete ndlp object after sending BLS_RJT to an ABTS Justin Tee
2024-01-31 2:39 ` Himanshu Madhani
2024-01-31 0:35 ` [PATCH 09/17] lpfc: Save FPIN frequency statistics upon receipt of peer cgn notifications Justin Tee
2024-01-31 2:39 ` Himanshu Madhani
2024-01-31 0:35 ` [PATCH 10/17] lpfc: Move handling of reset congestion statistics events Justin Tee
2024-01-31 2:40 ` Himanshu Madhani
2024-01-31 0:35 ` [PATCH 11/17] lpfc: Remove shost_lock protection for fc_host_port shost APIs Justin Tee
2024-01-31 2:41 ` Himanshu Madhani
2024-01-31 0:35 ` [PATCH 12/17] lpfc: Change nlp state statistic counters into atomic_t Justin Tee
2024-01-31 2:44 ` Himanshu Madhani
2024-01-31 0:35 ` [PATCH 13/17] lpfc: Protect vport fc_nodes list with an explicit spin lock Justin Tee
2024-01-31 2:50 ` Himanshu Madhani
2024-01-31 0:35 ` [PATCH 14/17] lpfc: Change lpfc_vport fc_flag member into a bitmask Justin Tee
2024-01-31 3:35 ` Himanshu Madhani
2024-01-31 18:31 ` Justin Tee
2024-01-31 0:35 ` [PATCH 15/17] lpfc: Change lpfc_vport load_flag " Justin Tee
2024-01-31 0:35 ` [PATCH 16/17] lpfc: Update lpfc version to 14.4.0.0 Justin Tee
2024-01-31 2:33 ` Himanshu Madhani
2024-01-31 0:35 ` [PATCH 17/17] lpfc: Copyright updates for 14.4.0.0 patches Justin Tee
2024-01-31 2:33 ` Himanshu Madhani
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=81e436d2-9f42-48bd-a7ee-903893cb7334@oracle.com \
--to=himanshu.madhani@oracle.com \
--cc=jsmart2021@gmail.com \
--cc=justin.tee@broadcom.com \
--cc=justintee8345@gmail.com \
--cc=linux-scsi@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox