When operating in private loop mode, PLOGI exchanges are racing and
the driver tries to abort it's PLOGI. But the PLOGI abort ends up
terminating the login with the other end causing the other end to
abort its PLOGI as well. Discovery never fully completes.

Fix by disabling the PLOGI abort when private loop and letting the
state machine play out.

Signed-off-by: Dick Kennedy <dick.kenn...@broadcom.com>
Signed-off-by: James Smart <jsmart2...@gmail.com>
---
 drivers/scsi/lpfc/lpfc_nportdisc.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/lpfc/lpfc_nportdisc.c 
b/drivers/scsi/lpfc/lpfc_nportdisc.c
index cc6b1b0bae83..64b7aeeea337 100644
--- a/drivers/scsi/lpfc/lpfc_nportdisc.c
+++ b/drivers/scsi/lpfc/lpfc_nportdisc.c
@@ -542,8 +542,10 @@ lpfc_rcv_plogi(struct lpfc_vport *vport, struct 
lpfc_nodelist *ndlp,
         * single discovery thread, this will cause a huge delay in
         * discovery. Also this will cause multiple state machines
         * running in parallel for this node.
+        * This only applies to a fabric environment.
         */
-       if (ndlp->nlp_state == NLP_STE_PLOGI_ISSUE) {
+       if ((ndlp->nlp_state == NLP_STE_PLOGI_ISSUE) &&
+           (vport->fc_flag & FC_FABRIC)) {
                /* software abort outstanding PLOGI */
                lpfc_els_abort(phba, ndlp);
        }
-- 
2.13.7

Reply via email to