scsi: lpfc: Qualify ndlp discovery state when processing RSCN
authorJustin Tee <justin.tee@broadcom.com>
Wed, 12 Jul 2023 18:05:14 +0000 (11:05 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sun, 23 Jul 2023 20:17:07 +0000 (16:17 -0400)
Conditionalize when to put an ndlp into recovery mode when processing
RSCNs.  As long as an ndlp state is beyond a PLOGI issue and has been
mapped to a transport layer before, the ndlp qualifies to be put into
recovery mode.  Otherwise, treat the ndlp rport normally through the
discovery engine.

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

index 499849b58ee47ba530adfeaf860e558a85c1a21a..b4303254744ab97324665b1b135a976364f59f52 100644 (file)
@@ -5757,8 +5757,11 @@ lpfc_setup_disc_node(struct lpfc_vport *vport, uint32_t did)
                             (NLP_FCP_TARGET | NLP_NVME_TARGET)))
                                return NULL;
 
-                       lpfc_disc_state_machine(vport, ndlp, NULL,
-                                               NLP_EVT_DEVICE_RECOVERY);
+                       if (ndlp->nlp_state > NLP_STE_UNUSED_NODE &&
+                           ndlp->nlp_state < NLP_STE_NPR_NODE) {
+                               lpfc_disc_state_machine(vport, ndlp, NULL,
+                                                       NLP_EVT_DEVICE_RECOVERY);
+                       }
 
                        spin_lock_irq(&ndlp->lock);
                        ndlp->nlp_flag |= NLP_NPR_2B_DISC;