*/
        new_ndlp = lpfc_findnode_wwpn(vport, &sp->portName);
 
+       /* return immediately if the WWPN matches ndlp */
        if (new_ndlp == ndlp && NLP_CHK_NODE_ACT(new_ndlp))
                return ndlp;
+
        if (phba->sli_rev == LPFC_SLI_REV4) {
                active_rrqs_xri_bitmap = mempool_alloc(phba->active_rrq_pool,
                                                       GFP_KERNEL);
                               phba->cfg_rrq_xri_bitmap_sz);
        }
 
-       lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS,
-                "3178 PLOGI confirm: ndlp %p x%x: new_ndlp %p\n",
-                ndlp, ndlp->nlp_DID, new_ndlp);
+       lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS | LOG_NODE,
+                        "3178 PLOGI confirm: ndlp x%x x%x x%x: "
+                        "new_ndlp x%x x%x x%x\n",
+                        ndlp->nlp_DID, ndlp->nlp_flag,  ndlp->nlp_fc4_type,
+                        (new_ndlp ? new_ndlp->nlp_DID : 0),
+                        (new_ndlp ? new_ndlp->nlp_flag : 0),
+                        (new_ndlp ? new_ndlp->nlp_fc4_type : 0));
 
        if (!new_ndlp) {
                rc = memcmp(&ndlp->nlp_portname, name,
                               phba->cfg_rrq_xri_bitmap_sz);
        }
 
+       /* At this point in this routine, we know new_ndlp will be
+        * returned. however, any previous GID_FTs that were done
+        * would have updated nlp_fc4_type in ndlp, so we must ensure
+        * new_ndlp has the right value.
+        */
+       if (vport->fc_flag & FC_FABRIC)
+               new_ndlp->nlp_fc4_type = ndlp->nlp_fc4_type;
+
        lpfc_unreg_rpi(vport, new_ndlp);
        new_ndlp->nlp_DID = ndlp->nlp_DID;
        new_ndlp->nlp_prev_state = ndlp->nlp_prev_state;
                if (ndlp->nrport) {
                        ndlp->nrport = NULL;
                        lpfc_nlp_put(ndlp);
-                       new_ndlp->nlp_fc4_type = ndlp->nlp_fc4_type;
                }
 
                /* We shall actually free the ndlp with both nlp_DID and
            active_rrqs_xri_bitmap)
                mempool_free(active_rrqs_xri_bitmap,
                             phba->active_rrq_pool);
+
+       lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS | LOG_NODE,
+                        "3173 PLOGI confirm exit: new_ndlp x%x x%x x%x\n",
+                        new_ndlp->nlp_DID, new_ndlp->nlp_flag,
+                        new_ndlp->nlp_fc4_type);
+
        return new_ndlp;
 }
 
 
        /* DSM in event <evt> on NPort <nlp_DID> in state <cur_state> */
        lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY,
                         "0211 DSM in event x%x on NPort x%x in "
-                        "state %d Data: x%x\n",
-                        evt, ndlp->nlp_DID, cur_state, ndlp->nlp_flag);
+                        "state %d Data: x%x x%x\n",
+                        evt, ndlp->nlp_DID, cur_state,
+                        ndlp->nlp_flag, ndlp->nlp_fc4_type);
 
        lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_DSM,
                 "DSM in:          evt:%d ste:%d did:x%x",