return;
 }
 
+static void
+lpfc_cmpl_ct_cmd_rff_id(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb,
+                        struct lpfc_iocbq * rspiocb)
+{
+       lpfc_cmpl_ct_cmd_rft_id(phba, cmdiocb, rspiocb);
+       return;
+}
+
 void
 lpfc_get_hba_sym_node_name(struct lpfc_hba * phba, uint8_t * symbp)
 {
                bpl->tus.f.bdeSize = RNN_REQUEST_SZ;
        else if (cmdcode == SLI_CTNS_RSNN_NN)
                bpl->tus.f.bdeSize = RSNN_REQUEST_SZ;
+       else if (cmdcode == SLI_CTNS_RFF_ID)
+               bpl->tus.f.bdeSize = RFF_REQUEST_SZ;
        else
                bpl->tus.f.bdeSize = 0;
        bpl->tus.w = le32_to_cpu(bpl->tus.w);
                cmpl = lpfc_cmpl_ct_cmd_rft_id;
                break;
 
+       case SLI_CTNS_RFF_ID:
+               CtReq->CommandResponse.bits.CmdRsp =
+                       be16_to_cpu(SLI_CTNS_RFF_ID);
+               CtReq->un.rff.PortId = be32_to_cpu(phba->fc_myDID);
+               CtReq->un.rff.feature_res = 0;
+               CtReq->un.rff.feature_tgt = 0;
+               CtReq->un.rff.type_code = FC_FCP_DATA;
+               CtReq->un.rff.feature_init = 1;
+               cmpl = lpfc_cmpl_ct_cmd_rff_id;
+               break;
+
        case SLI_CTNS_RNN_ID:
                CtReq->CommandResponse.bits.CmdRsp =
                    be16_to_cpu(SLI_CTNS_RNN_ID);
                        ae = (ATTRIBUTE_ENTRY *) ((uint8_t *) rh + size);
                        ae->ad.bits.AttrType = be16_to_cpu(OS_NAME_VERSION);
                        sprintf(ae->un.OsNameVersion, "%s %s %s",
-                               init_utsname()->sysname, init_utsname()->release,
+                               init_utsname()->sysname,
+                               init_utsname()->release,
                                init_utsname()->version);
                        len = strlen(ae->un.OsNameVersion);
                        len += (len & 3) ? (4 - (len & 3)) : 4;
 
                lpfc_ns_cmd(phba, ndlp, SLI_CTNS_RNN_ID);
                lpfc_ns_cmd(phba, ndlp, SLI_CTNS_RSNN_NN);
                lpfc_ns_cmd(phba, ndlp, SLI_CTNS_RFT_ID);
+               lpfc_ns_cmd(phba, ndlp, SLI_CTNS_RFF_ID);
        }
 
        phba->fc_ns_retry = 0;
 struct lpfc_nodelist *
 lpfc_findnode_did(struct lpfc_hba * phba, uint32_t order, uint32_t did)
 {
-       struct lpfc_nodelist *ndlp, *next_ndlp;
+       struct lpfc_nodelist *ndlp;
+       struct list_head *lists[]={&phba->fc_nlpunmap_list,
+                                  &phba->fc_nlpmap_list,
+                                  &phba->fc_plogi_list,
+                                  &phba->fc_adisc_list,
+                                  &phba->fc_reglogin_list,
+                                  &phba->fc_prli_list,
+                                  &phba->fc_npr_list,
+                                  &phba->fc_unused_list};
+       uint32_t search[]={NLP_SEARCH_UNMAPPED,
+                          NLP_SEARCH_MAPPED,
+                          NLP_SEARCH_PLOGI,
+                          NLP_SEARCH_ADISC,
+                          NLP_SEARCH_REGLOGIN,
+                          NLP_SEARCH_PRLI,
+                          NLP_SEARCH_NPR,
+                          NLP_SEARCH_UNUSED};
+       int i;
        uint32_t data1;
 
        spin_lock_irq(phba->host->host_lock);
-       if (order & NLP_SEARCH_UNMAPPED) {
-               list_for_each_entry_safe(ndlp, next_ndlp,
-                                        &phba->fc_nlpunmap_list, nlp_listp) {
-                       if (lpfc_matchdid(phba, ndlp, did)) {
-                               data1 = (((uint32_t) ndlp->nlp_state << 24) |
-                                        ((uint32_t) ndlp->nlp_xri << 16) |
-                                        ((uint32_t) ndlp->nlp_type << 8) |
-                                        ((uint32_t) ndlp->nlp_rpi & 0xff));
-                               /* FIND node DID unmapped */
-                               lpfc_printf_log(phba, KERN_INFO, LOG_NODE,
-                                               "%d:0929 FIND node DID unmapped"
-                                               " Data: x%p x%x x%x x%x\n",
-                                               phba->brd_no,
-                                               ndlp, ndlp->nlp_DID,
-                                               ndlp->nlp_flag, data1);
-                               spin_unlock_irq(phba->host->host_lock);
-                               return ndlp;
-                       }
-               }
-       }
-
-       if (order & NLP_SEARCH_MAPPED) {
-               list_for_each_entry_safe(ndlp, next_ndlp, &phba->fc_nlpmap_list,
-                                       nlp_listp) {
-                       if (lpfc_matchdid(phba, ndlp, did)) {
-
-                               data1 = (((uint32_t) ndlp->nlp_state << 24) |
-                                        ((uint32_t) ndlp->nlp_xri << 16) |
-                                        ((uint32_t) ndlp->nlp_type << 8) |
-                                        ((uint32_t) ndlp->nlp_rpi & 0xff));
-                               /* FIND node DID mapped */
-                               lpfc_printf_log(phba, KERN_INFO, LOG_NODE,
-                                               "%d:0930 FIND node DID mapped "
-                                               "Data: x%p x%x x%x x%x\n",
-                                               phba->brd_no,
-                                               ndlp, ndlp->nlp_DID,
-                                               ndlp->nlp_flag, data1);
-                               spin_unlock_irq(phba->host->host_lock);
-                               return ndlp;
-                       }
-               }
-       }
-
-       if (order & NLP_SEARCH_PLOGI) {
-               list_for_each_entry_safe(ndlp, next_ndlp, &phba->fc_plogi_list,
-                                       nlp_listp) {
-                       if (lpfc_matchdid(phba, ndlp, did)) {
-
-                               data1 = (((uint32_t) ndlp->nlp_state << 24) |
-                                        ((uint32_t) ndlp->nlp_xri << 16) |
-                                        ((uint32_t) ndlp->nlp_type << 8) |
-                                        ((uint32_t) ndlp->nlp_rpi & 0xff));
-                               /* LOG change to PLOGI */
-                               /* FIND node DID plogi */
-                               lpfc_printf_log(phba, KERN_INFO, LOG_NODE,
-                                               "%d:0908 FIND node DID plogi "
-                                               "Data: x%p x%x x%x x%x\n",
-                                               phba->brd_no,
-                                               ndlp, ndlp->nlp_DID,
-                                               ndlp->nlp_flag, data1);
-                               spin_unlock_irq(phba->host->host_lock);
-                               return ndlp;
-                       }
-               }
-       }
-
-       if (order & NLP_SEARCH_ADISC) {
-               list_for_each_entry_safe(ndlp, next_ndlp, &phba->fc_adisc_list,
-                                       nlp_listp) {
-                       if (lpfc_matchdid(phba, ndlp, did)) {
-
-                               data1 = (((uint32_t) ndlp->nlp_state << 24) |
-                                        ((uint32_t) ndlp->nlp_xri << 16) |
-                                        ((uint32_t) ndlp->nlp_type << 8) |
-                                        ((uint32_t) ndlp->nlp_rpi & 0xff));
-                               /* LOG change to ADISC */
-                               /* FIND node DID adisc */
-                               lpfc_printf_log(phba, KERN_INFO, LOG_NODE,
-                                               "%d:0931 FIND node DID adisc "
-                                               "Data: x%p x%x x%x x%x\n",
-                                               phba->brd_no,
-                                               ndlp, ndlp->nlp_DID,
-                                               ndlp->nlp_flag, data1);
-                               spin_unlock_irq(phba->host->host_lock);
-                               return ndlp;
-                       }
-               }
-       }
-
-       if (order & NLP_SEARCH_REGLOGIN) {
-               list_for_each_entry_safe(ndlp, next_ndlp,
-                                        &phba->fc_reglogin_list, nlp_listp) {
+       for (i = 0; i < ARRAY_SIZE(lists); i++ ) {
+               if (!(order & search[i]))
+                       continue;
+               list_for_each_entry(ndlp, lists[i], nlp_listp) {
                        if (lpfc_matchdid(phba, ndlp, did)) {
-
                                data1 = (((uint32_t) ndlp->nlp_state << 24) |
                                         ((uint32_t) ndlp->nlp_xri << 16) |
                                         ((uint32_t) ndlp->nlp_type << 8) |
                                         ((uint32_t) ndlp->nlp_rpi & 0xff));
-                               /* LOG change to REGLOGIN */
-                               /* FIND node DID reglogin */
                                lpfc_printf_log(phba, KERN_INFO, LOG_NODE,
-                                               "%d:0901 FIND node DID reglogin"
+                                               "%d:0929 FIND node DID "
                                                " Data: x%p x%x x%x x%x\n",
                                                phba->brd_no,
                                                ndlp, ndlp->nlp_DID,
                        }
                }
        }
-
-       if (order & NLP_SEARCH_PRLI) {
-               list_for_each_entry_safe(ndlp, next_ndlp, &phba->fc_prli_list,
-                                       nlp_listp) {
-                       if (lpfc_matchdid(phba, ndlp, did)) {
-
-                               data1 = (((uint32_t) ndlp->nlp_state << 24) |
-                                        ((uint32_t) ndlp->nlp_xri << 16) |
-                                        ((uint32_t) ndlp->nlp_type << 8) |
-                                        ((uint32_t) ndlp->nlp_rpi & 0xff));
-                               /* LOG change to PRLI */
-                               /* FIND node DID prli */
-                               lpfc_printf_log(phba, KERN_INFO, LOG_NODE,
-                                               "%d:0902 FIND node DID prli "
-                                               "Data: x%p x%x x%x x%x\n",
-                                               phba->brd_no,
-                                               ndlp, ndlp->nlp_DID,
-                                               ndlp->nlp_flag, data1);
-                               spin_unlock_irq(phba->host->host_lock);
-                               return ndlp;
-                       }
-               }
-       }
-
-       if (order & NLP_SEARCH_NPR) {
-               list_for_each_entry_safe(ndlp, next_ndlp, &phba->fc_npr_list,
-                                       nlp_listp) {
-                       if (lpfc_matchdid(phba, ndlp, did)) {
-
-                               data1 = (((uint32_t) ndlp->nlp_state << 24) |
-                                        ((uint32_t) ndlp->nlp_xri << 16) |
-                                        ((uint32_t) ndlp->nlp_type << 8) |
-                                        ((uint32_t) ndlp->nlp_rpi & 0xff));
-                               /* LOG change to NPR */
-                               /* FIND node DID npr */
-                               lpfc_printf_log(phba, KERN_INFO, LOG_NODE,
-                                               "%d:0903 FIND node DID npr "
-                                               "Data: x%p x%x x%x x%x\n",
-                                               phba->brd_no,
-                                               ndlp, ndlp->nlp_DID,
-                                               ndlp->nlp_flag, data1);
-                               spin_unlock_irq(phba->host->host_lock);
-                               return ndlp;
-                       }
-               }
-       }
-
-       if (order & NLP_SEARCH_UNUSED) {
-               list_for_each_entry_safe(ndlp, next_ndlp, &phba->fc_adisc_list,
-                                       nlp_listp) {
-                       if (lpfc_matchdid(phba, ndlp, did)) {
-
-                               data1 = (((uint32_t) ndlp->nlp_state << 24) |
-                                        ((uint32_t) ndlp->nlp_xri << 16) |
-                                        ((uint32_t) ndlp->nlp_type << 8) |
-                                        ((uint32_t) ndlp->nlp_rpi & 0xff));
-                               /* LOG change to UNUSED */
-                               /* FIND node DID unused */
-                               lpfc_printf_log(phba, KERN_INFO, LOG_NODE,
-                                               "%d:0905 FIND node DID unused "
-                                               "Data: x%p x%x x%x x%x\n",
-                                               phba->brd_no,
-                                               ndlp, ndlp->nlp_DID,
-                                               ndlp->nlp_flag, data1);
-                               spin_unlock_irq(phba->host->host_lock);
-                               return ndlp;
-                       }
-               }
-       }
-
        spin_unlock_irq(phba->host->host_lock);
 
        /* FIND node did <did> NOT FOUND */
-       lpfc_printf_log(phba,
-                       KERN_INFO,
-                       LOG_NODE,
+       lpfc_printf_log(phba, KERN_INFO, LOG_NODE,
                        "%d:0932 FIND node did x%x NOT FOUND Data: x%x\n",
                        phba->brd_no, did, order);
-
-       /* no match found */
        return NULL;
 }