struct lpfc_hba   *phba = vport->phba;
        struct lpfc_nvmet_tgtport *tgtp;
        struct nvme_fc_local_port *localport;
-       struct lpfc_nvme_lport *lport;
-       struct lpfc_nvme_rport *rport;
+       struct lpfc_nodelist *ndlp;
        struct nvme_fc_remote_port *nrport;
        char *statep;
        int len = 0;
        len = snprintf(buf, PAGE_SIZE, "NVME Initiator Enabled\n");
 
        spin_lock_irq(shost->host_lock);
-       lport = (struct lpfc_nvme_lport *)localport->private;
 
        /* Port state is only one of two values for now. */
        if (localport->port_id)
                        wwn_to_u64(vport->fc_nodename.u.wwn),
                        localport->port_id, statep);
 
-       list_for_each_entry(rport, &lport->rport_list, list) {
+       list_for_each_entry(ndlp, &vport->fc_nodes, nlp_listp) {
+               if (!ndlp->nrport)
+                       continue;
+
                /* local short-hand pointer. */
-               nrport = rport->remoteport;
+               nrport = ndlp->nrport->remoteport;
 
                /* Port state is only one of two values for now. */
                switch (nrport->port_state) {
 
        struct lpfc_nodelist *ndlp;
        unsigned char *statep;
        struct nvme_fc_local_port *localport;
-       struct lpfc_nvme_lport *lport;
-       struct lpfc_nvme_rport *rport;
        struct lpfc_nvmet_tgtport *tgtp;
        struct nvme_fc_remote_port *nrport;
 
                goto out_exit;
 
        spin_lock_irq(shost->host_lock);
-       lport = (struct lpfc_nvme_lport *)localport->private;
 
        /* Port state is only one of two values for now. */
        if (localport->port_id)
                        localport->port_id, statep);
 
        len += snprintf(buf + len, size - len, "\tRport List:\n");
-       list_for_each_entry(rport, &lport->rport_list, list) {
+       list_for_each_entry(ndlp, &vport->fc_nodes, nlp_listp) {
                /* local short-hand pointer. */
-               nrport = rport->remoteport;
+               if (!ndlp->nrport)
+                       continue;
+
+               nrport = ndlp->nrport->remoteport;
 
                /* Port state is only one of two values for now. */
                switch (nrport->port_state) {
 
        lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_DISC,
                        "6146 remoteport delete complete %p\n",
                        remoteport);
-       list_del(&rport->list);
        ndlp->nrport = NULL;
        lpfc_nlp_put(ndlp);
 
                lport = (struct lpfc_nvme_lport *)localport->private;
                vport->localport = localport;
                lport->vport = vport;
-               INIT_LIST_HEAD(&lport->rport_list);
                vport->nvmei_support = 1;
                len  = lpfc_new_nvme_buf(vport, phba->sli4_hba.nvme_xri_max);
                vport->phba->total_nvme_bufs += len;
 #if (IS_ENABLED(CONFIG_NVME_FC))
        struct nvme_fc_local_port *localport;
        struct lpfc_nvme_lport *lport;
-       struct lpfc_nvme_rport *rport = NULL, *rport_next = NULL;
        int ret;
 
        if (vport->nvmei_support == 0)
        lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME,
                         "6011 Destroying NVME localport %p\n",
                         localport);
-       list_for_each_entry_safe(rport, rport_next, &lport->rport_list, list) {
-               /* The last node ref has to get released now before the rport
-                * private memory area is released by the transport.
-                */
-               list_del(&rport->list);
-
-               init_completion(&rport->rport_unreg_done);
-               ret = nvme_fc_unregister_remoteport(rport->remoteport);
-               if (ret)
-                       lpfc_printf_vlog(vport, KERN_ERR, LOG_NVME_DISC,
-                                        "6008 rport fail destroy %x\n", ret);
-               wait_for_completion_timeout(&rport->rport_unreg_done, 5);
-       }
 
        /* lport's rport list is clear.  Unregister
         * lport and release resources.
                        if (!rport->ndlp)
                                return -1;
                        ndlp->nrport = rport;
-                       INIT_LIST_HEAD(&rport->list);
-                       list_add_tail(&rport->list, &lport->rport_list);
                        lpfc_printf_vlog(vport, KERN_INFO,
                                         LOG_NVME_DISC | LOG_NODE,
                                         "6022 Binding new rport to "
 
 /* Declare nvme-based local and remote port definitions. */
 struct lpfc_nvme_lport {
        struct lpfc_vport *vport;
-       struct list_head rport_list;
        struct completion lport_unreg_done;
        /* Add sttats counters here */
 };
 
 struct lpfc_nvme_rport {
-       struct list_head list;
        struct lpfc_nvme_lport *lport;
        struct nvme_fc_remote_port *remoteport;
        struct lpfc_nodelist *ndlp;