{
        struct lpfc_vport *vport = cmdiocb->vport;
        IOCB_t *irsp;
-       struct lpfc_nodelist *ndlp;
+       struct lpfc_nodelist *ndlp = cmdiocb->context1;
        struct lpfc_node_rrq *rrq;
 
        /* we pass cmdiocb to state machine which needs rspiocb as well */
                irsp->ulpStatus, irsp->un.ulpWord[4],
                irsp->un.elsreq64.remoteID);
 
-       ndlp = lpfc_findnode_did(vport, irsp->un.elsreq64.remoteID);
-       if (!ndlp || ndlp != rrq->ndlp) {
-               lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT,
-                                "2882 RRQ completes to NPort x%x "
-                                "with no ndlp. Data: x%x x%x x%x\n",
-                                irsp->un.elsreq64.remoteID,
-                                irsp->ulpStatus, irsp->un.ulpWord[4],
-                                irsp->ulpIoTag);
-               goto out;
-       }
-
        /* rrq completes to NPort <nlp_DID> */
        lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS,
-                        "2880 RRQ completes to NPort x%x "
+                        "2880 RRQ completes to DID x%x "
                         "Data: x%x x%x x%x x%x x%x\n",
-                        ndlp->nlp_DID, irsp->ulpStatus, irsp->un.ulpWord[4],
+                        irsp->un.elsreq64.remoteID,
+                        irsp->ulpStatus, irsp->un.ulpWord[4],
                         irsp->ulpTimeout, rrq->xritag, rrq->rxid);
 
        if (irsp->ulpStatus) {
                                         ndlp->nlp_DID, irsp->ulpStatus,
                                         irsp->un.ulpWord[4]);
        }
-out:
-       if (rrq)
-               lpfc_clr_rrq_active(phba, rrq->xritag, rrq);
 
+       lpfc_clr_rrq_active(phba, rrq->xritag, rrq);
        lpfc_els_free_iocb(phba, cmdiocb);
        lpfc_nlp_put(ndlp);
        return;
        uint16_t cmdsize;
        int ret;
 
-
-       if (ndlp != rrq->ndlp)
-               ndlp = rrq->ndlp;
        if (!ndlp)
                return 1;
 
                did, rrq->xritag, rrq->rxid);
        elsiocb->context_un.rrq = rrq;
        elsiocb->iocb_cmpl = lpfc_cmpl_els_rrq;
-       elsiocb->context1 = lpfc_nlp_get(ndlp);
-       if (!elsiocb->context1)
-               goto node_err;
+
+       lpfc_nlp_get(ndlp);
+       elsiocb->context1 = ndlp;
 
        ret = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, elsiocb, 0);
        if (ret == IOCB_ERROR)
 
  io_err:
        lpfc_nlp_put(ndlp);
- node_err:
        lpfc_els_free_iocb(phba, elsiocb);
        return 1;
 }
 
 {
        struct lpfc_nodelist *ndlp = NULL;
 
+       /* Lookup did to verify if did is still active on this vport */
        if (rrq->vport)
                ndlp = lpfc_findnode_did(rrq->vport, rrq->nlp_DID);
 
-       /* The target DID could have been swapped (cable swap)
-        * we should use the ndlp from the findnode if it is
-        * available.
-        */
-       if ((!ndlp) && rrq->ndlp)
-               ndlp = rrq->ndlp;
-
        if (!ndlp)
                goto out;
 
                lpfc_sli4_vport_delete_fcp_xri_aborted(vport);
        }
        spin_lock_irqsave(&phba->hbalock, iflags);
-       list_for_each_entry_safe(rrq, nextrrq, &phba->active_rrq_list, list)
-               if ((rrq->vport == vport) && (!ndlp  || rrq->ndlp == ndlp))
+       list_for_each_entry_safe(rrq, nextrrq, &phba->active_rrq_list, list) {
+               if (rrq->vport != vport)
+                       continue;
+
+               if (!ndlp || ndlp == lpfc_findnode_did(vport, rrq->nlp_DID))
                        list_move(&rrq->list, &rrq_list);
+
+       }
        spin_unlock_irqrestore(&phba->hbalock, iflags);
 
        list_for_each_entry_safe(rrq, nextrrq, &rrq_list, list) {
        rrq->xritag = xritag;
        rrq->rrq_stop_time = jiffies +
                                msecs_to_jiffies(1000 * (phba->fc_ratov + 1));
-       rrq->ndlp = ndlp;
        rrq->nlp_DID = ndlp->nlp_DID;
        rrq->vport = ndlp->vport;
        rrq->rxid = rxid;