]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
scsi: lpfc: Skip RSCN processing when FC_UNLOADING flag is set
authorJustin Tee <justin.tee@broadcom.com>
Wed, 18 Jun 2025 19:21:29 +0000 (12:21 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Mon, 23 Jun 2025 17:10:33 +0000 (13:10 -0400)
During rmmod, all ndlp objects are cleaned up and marked with the
NLP_DROPPED flag indicating that an ndlp object is currently being
released.  Thus, if an RSCN is received during driver unload, then
walking the fc_nodes list to process the RSCN is unnecessary because the
ndlp objects are very shortly going to be released.

In the lpfc_rscn_recovery_check routine, early return if the driver is in
the middle of unloading by checking for the FC_UNLOADING flag.

Signed-off-by: Justin Tee <justin.tee@broadcom.com>
Link: https://lore.kernel.org/r/20250618192138.124116-5-justintee8345@gmail.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/lpfc/lpfc_els.c

index b1a61eca82956261a4843898aab912b60bfe12aa..f7ed245aece55cee5229678d53a43107224e9251 100644 (file)
@@ -7861,6 +7861,13 @@ lpfc_rscn_recovery_check(struct lpfc_vport *vport)
 
        /* Move all affected nodes by pending RSCNs to NPR state. */
        list_for_each_entry_safe(ndlp, n, &vport->fc_nodes, nlp_listp) {
+               if (test_bit(FC_UNLOADING, &vport->load_flag)) {
+                       lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS,
+                                        "1000 %s Unloading set\n",
+                                        __func__);
+                       return 0;
+               }
+
                if ((ndlp->nlp_state == NLP_STE_UNUSED_NODE) ||
                    !lpfc_rscn_payload_check(vport, ndlp->nlp_DID))
                        continue;