* is already in MAPPED or UNMAPPED state.  Catch this
                 * condition and don't set the nlp_state again because
                 * it causes an unnecessary transport unregister/register.
+                *
+                * Nodes marked for ADISC will move MAPPED or UNMAPPED state
+                * after issuing ADISC
                 */
                if (ndlp->nlp_type & (NLP_FCP_TARGET | NLP_NVME_TARGET)) {
-                       if (ndlp->nlp_state != NLP_STE_MAPPED_NODE)
+                       if ((ndlp->nlp_state != NLP_STE_MAPPED_NODE) &&
+                           !(ndlp->nlp_flag & NLP_NPR_ADISC))
                                lpfc_nlp_set_state(vport, ndlp,
                                                   NLP_STE_MAPPED_NODE);
                }
        lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, NULL);
 
        if (!(ndlp->nlp_flag & NLP_DELAY_TMO)) {
-               if (ndlp->nlp_flag & NLP_NPR_ADISC) {
-                       spin_lock_irq(&ndlp->lock);
-                       ndlp->nlp_flag &= ~NLP_NPR_ADISC;
-                       ndlp->nlp_prev_state = NLP_STE_NPR_NODE;
-                       spin_unlock_irq(&ndlp->lock);
-                       lpfc_nlp_set_state(vport, ndlp, NLP_STE_ADISC_ISSUE);
-                       lpfc_issue_els_adisc(vport, ndlp, 0);
-               } else {
+               /*
+                * ADISC nodes will be handled in regular discovery path after
+                * receiving response from NS.
+                *
+                * For other nodes, Send PLOGI to trigger an implicit LOGO.
+                */
+               if (!(ndlp->nlp_flag & NLP_NPR_ADISC)) {
                        ndlp->nlp_prev_state = NLP_STE_NPR_NODE;
                        lpfc_nlp_set_state(vport, ndlp, NLP_STE_PLOGI_ISSUE);
                        lpfc_issue_els_plogi(vport, ndlp->nlp_DID, 0);
         */
        if (!(ndlp->nlp_flag & NLP_DELAY_TMO) &&
            !(ndlp->nlp_flag & NLP_NPR_2B_DISC)) {
-               if (ndlp->nlp_flag & NLP_NPR_ADISC) {
-                       ndlp->nlp_flag &= ~NLP_NPR_ADISC;
-                       ndlp->nlp_prev_state = NLP_STE_NPR_NODE;
-                       lpfc_nlp_set_state(vport, ndlp, NLP_STE_ADISC_ISSUE);
-                       lpfc_issue_els_adisc(vport, ndlp, 0);
-               } else {
+               /*
+                * ADISC nodes will be handled in regular discovery path after
+                * receiving response from NS.
+                *
+                * For other nodes, Send PLOGI to trigger an implicit LOGO.
+                */
+               if (!(ndlp->nlp_flag & NLP_NPR_ADISC)) {
                        ndlp->nlp_prev_state = NLP_STE_NPR_NODE;
                        lpfc_nlp_set_state(vport, ndlp, NLP_STE_PLOGI_ISSUE);
                        lpfc_issue_els_plogi(vport, ndlp->nlp_DID, 0);