]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
scsi: lpfc: Decrement ndlp kref after FDISC retries exhausted
authorJustin Tee <justin.tee@broadcom.com>
Mon, 15 Sep 2025 18:08:02 +0000 (11:08 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Nov 2025 20:37:25 +0000 (15:37 -0500)
[ Upstream commit b5bf6d681fce69cd1a57bfc0f1bdbbb348035117 ]

The kref for Fabric_DID ndlps is not decremented after repeated FDISC
failures and exhausting maximum allowed retries.  This can leave the
ndlp lingering unnecessarily.  Add a test and set bit operation for the
NLP_DROPPED flag. If not previously set, then a kref is decremented. The
ndlp is freed when the remaining reference for the completing ELS is
put.

Signed-off-by: Justin Tee <justin.tee@broadcom.com>
Message-ID: <20250915180811.137530-6-justintee8345@gmail.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/scsi/lpfc/lpfc_els.c

index fca81e0c7c2e1a3cf6be4db6941fe2d8e0c28439..4c405bade4f349b48c72dc0b5664d529a96ff0e2 100644 (file)
@@ -11259,6 +11259,11 @@ lpfc_cmpl_els_fdisc(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
                lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS,
                              "0126 FDISC cmpl status: x%x/x%x)\n",
                              ulp_status, ulp_word4);
+
+               /* drop initial reference */
+               if (!test_and_set_bit(NLP_DROPPED, &ndlp->nlp_flag))
+                       lpfc_nlp_put(ndlp);
+
                goto fdisc_failed;
        }