]> www.infradead.org Git - users/hch/misc.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)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 17 Sep 2025 02:19:59 +0000 (22:19 -0400)
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>
drivers/scsi/lpfc/lpfc_els.c

index db6a6bbd00316561129e4845e56d674293baf0f0..3f703932b2f07a0eb9a464787afdde7af8297af3 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;
        }