--- ./source/private_module/unf_common/unf_portman.c	2019-04-24 10:11:46.669192966 +0000
+++ ./source/private_module/unf_common/unf_portman.c.hotpatch	2019-05-04 03:11:21.583954000 +0000
@@ -188,8 +188,8 @@
 LOCAL UNF_S32 UNF_CmSfpSwitchAsyn(UNF_VOID * v_pvArgIn, UNF_VOID * v_pvArgOut);
 LOCAL UNF_S32 UNF_QuertyPortSwitchState(UNF_VOID * v_pvArgcIn, UNF_VOID * v_pvArgcOut);
 LOCAL UNF_VOID UNF_RoutineHangIO(UNF_LPORT_S * v_pstLPort, const UNF_U32 v_uiDelayMs);
-
-
+UNF_VOID UNF_ClearHostWwpnListPatch(UNF_VOID);
+UNF_VOID UNF_TraverseLportCollInfoPatch(UNF_LPORT_S * v_pstLPort,UNF_CHAR * v_InFileBuffer,UNF_U32 * v_pstOutSize);
 UNF_S32 UNF_CmLoopBackTest(UNF_U32                   v_uiPortId, 
                            DRV_LOOPBACK_CHECK_OP_E   v_OpCode, 
                            UNF_VOID                * v_pstTestData);
@@ -11120,12 +11120,12 @@
         pstLPort = UNF_OS_LIST_ENTRY(pNode, UNF_LPORT_S, Entry_LPort);
 		
 		/* RportwwpnHBAinfoDataBuf ۼ */
-		UNF_TraverseLportCollInfo(pstLPort, pucDataBuf, pstOutSize);
+		UNF_TraverseLportCollInfoPatch(pstLPort, pucDataBuf, pstOutSize);
 	
     }
     
     /* wwpn */
-    UNF_ClearHostWwpnList();
+    UNF_ClearHostWwpnListPatch();
     UNF_OS_SPIN_UNLOCK_IRQRESTORE(&(g_stGlobalLPortMgr.stGlobalLPortListLock), ulFlags);
 
 	/* DataBufдļ */
@@ -20608,3 +20608,137 @@
     return RETURN_OK;
 }
 
+ UNF_VOID UNF_ClearHostWwpnListPatch(UNF_VOID)
+{
+    
+    UNF_HOSTPORTWWPN_S            * pHostPortWwpn   = NULL;
+    UNF_OS_STLISTHEAD             * pWwpnNode       = NULL;
+    UNF_OS_STLISTHEAD             * pNextWwpnNode   = NULL;
+
+    UNF_OS_LIST_FOR_EACH_SAFE(pWwpnNode, pNextWwpnNode, &g_stGlobalLPortMgr.ListHostWwpn_Head)
+    {
+        pHostPortWwpn = UNF_OS_LIST_ENTRY(pWwpnNode, UNF_HOSTPORTWWPN_S,Entry_HostPortWwpn);
+        
+        /* ժͷڴ */
+        UNF_OS_LIST_DEL_INIT(pWwpnNode);
+        UNF_OS_KFREE(pHostPortWwpn);
+    }
+
+    return ;
+}
+ 
+ UNF_BOOL_E UNF_CheckHostWwpnInListPatch(UNF_U64  v_ullHostwwpn)
+{
+    
+	UNF_U64                         ullHostwwpn  = 0;
+    UNF_HOSTPORTWWPN_S            * pHostPortWwpn = NULL;
+    UNF_HOSTPORTWWPN_S            * pNewHostPortWwpn = NULL;
+
+    UNF_OS_STLISTHEAD             * pWwpnNode       = NULL;
+    UNF_OS_STLISTHEAD             * pNextWwpnNode   = NULL;
+	ullHostwwpn = v_ullHostwwpn;
+    
+    UNF_OS_LIST_FOR_EACH_SAFE(pWwpnNode, pNextWwpnNode, &(g_stGlobalLPortMgr.ListHostWwpn_Head))
+    {
+        pHostPortWwpn = UNF_OS_LIST_ENTRY(pWwpnNode, UNF_HOSTPORTWWPN_S,Entry_HostPortWwpn);
+
+        if(ullHostwwpn == pHostPortWwpn->ullPortName)
+        {
+            return UNF_B_TRUE;
+        }
+    }
+    /* WWPNδ룬Ҫ */
+	pNewHostPortWwpn = (UNF_HOSTPORTWWPN_S*)UNF_OS_KMALLOC(sizeof(UNF_HOSTPORTWWPN_S), GFP_ATOMIC);
+	if(NULL == pNewHostPortWwpn)
+	{
+		UNF_TRACE(0x2598, UNF_LOG_EQUIP_ATT, UNF_WARN, "HostWwpnNode(%16llx) Alloc Failed." ,
+                  ullHostwwpn);
+		return UNF_B_FALSE;
+	}
+    
+    UNF_OS_MEMSET_S(pNewHostPortWwpn, sizeof(UNF_HOSTPORTWWPN_S), 0, sizeof(UNF_HOSTPORTWWPN_S));
+    pNewHostPortWwpn->ullPortName = ullHostwwpn;
+
+    UNF_OS_LIST_ADD_TAIL(&(pNewHostPortWwpn->Entry_HostPortWwpn), &(g_stGlobalLPortMgr.ListHostWwpn_Head));
+
+    return UNF_B_FALSE;
+}
+
+UNF_VOID UNF_TraverseLportCollInfoPatch(UNF_LPORT_S * v_pstLPort,UNF_CHAR * v_InFileBuffer,
+								  UNF_U32 * v_pstOutSize)
+{
+    UNF_RPORT_S       			  * pstRPort    = NULL;
+	UNF_LPORT_S                   * pstLPort    = NULL;	
+	UNF_DISC_S                    * pstDisc         = NULL;
+    UNF_OS_STLISTHEAD             * pDiscNode       = NULL;
+    UNF_OS_STLISTHEAD             * pNextDiscNode   = NULL;
+	
+	UNF_U32           			  * pstOutSize = NULL;
+	UNF_CHAR                      * pInFileBuffer  = NULL;
+    UNF_ULONG                       ulRPortFlag     = 0;	
+    UNF_ULONG                       ulDiscFlag     = 0;	
+ 	UNF_CHAR		                aucRportwwpnInfo[64];
+ 	UNF_CHAR		                aucHbaInfo[320]; 
+	UNF_CHAR		                pucDefaultHBAStr[] = "        HBA:\n";
+	
+	pstOutSize = (UNF_U32*)v_pstOutSize;
+	pInFileBuffer = (UNF_CHAR*)v_InFileBuffer;
+    
+    pstLPort = (UNF_LPORT_S * )v_pstLPort;
+    pstDisc = &(pstLPort->stDisc);
+
+    UNF_OS_SPIN_LOCK_IRQSAVE(&(pstDisc->stRPortBusyPoolLock), ulDiscFlag);
+
+	UNF_OS_LIST_FOR_EACH_SAFE(pDiscNode, pNextDiscNode, &pstDisc->list_BusyRPorts)
+	{
+		pstRPort = UNF_OS_LIST_ENTRY(pDiscNode, struct tagUNF_RPORT_S, Entry_RPort);
+			
+		/* ˽˿ */
+		if (UNF_FC_FID_DOM_MGR > pstRPort->uiNPortId)
+		{
+			UNF_OS_SPIN_LOCK_IRQSAVE(&(pstRPort->stRPortStateLock), ulRPortFlag);
+
+			/* 1жWWPN޴ĿȥأѴдļ 
+               2ждݺ󲻻ᳬڴ2M */
+            if((UNF_B_TRUE != UNF_CheckHostWwpnInListPatch(pstRPort->ullPortName))
+                &&(UNF_TOTAL_RECORD_LEN > (*pstOutSize + UNF_MAX_SINGLE_RECORD_LEN)))
+            {
+                /* WWPNDataBuf */
+                UNF_OS_MEMSET_S(aucRportwwpnInfo, sizeof(aucRportwwpnInfo), 0, sizeof(aucRportwwpnInfo));
+                (UNF_VOID)UNF_OS_SNPRINTF(aucRportwwpnInfo, sizeof(aucRportwwpnInfo),"        WWPN:%16llx\n",
+                                          pstRPort->ullPortName);
+                UNF_OS_STRNCAT_S(pInFileBuffer, UNF_TOTAL_RECORD_LEN, aucRportwwpnInfo, UNF_OS_STRLEN(aucRportwwpnInfo));
+                *pstOutSize += UNF_OS_STRLEN(aucRportwwpnInfo);
+
+                /* HBAϢDataBufУδ鵽 */
+                UNF_OS_MEMSET_S(aucHbaInfo, sizeof(aucHbaInfo), 0, sizeof(aucHbaInfo));
+                if( NULL != pstRPort->pHostHBAInfo)
+                {
+                    (UNF_VOID)UNF_OS_SNPRINTF(aucHbaInfo, sizeof(aucHbaInfo), "        HBA:%s\n", 
+                                              pstRPort->pHostHBAInfo);
+                    UNF_OS_STRNCAT_S(pInFileBuffer, UNF_TOTAL_RECORD_LEN, aucHbaInfo, UNF_OS_STRLEN(aucHbaInfo));
+
+                    *pstOutSize += UNF_OS_STRLEN(aucHbaInfo);
+                }
+                else
+                {
+                    UNF_OS_STRNCAT_S(pInFileBuffer, UNF_TOTAL_RECORD_LEN, pucDefaultHBAStr, UNF_OS_STRLEN(pucDefaultHBAStr));
+
+                    *pstOutSize += UNF_OS_STRLEN(pucDefaultHBAStr);
+                }
+                
+                /* ÿRportϢҪһ */
+                UNF_OS_STRNCAT_S(pInFileBuffer, UNF_TOTAL_RECORD_LEN, "\n", 1);
+                
+                *pstOutSize += 1;
+                
+            }
+            
+            UNF_OS_SPIN_UNLOCK_IRQRESTORE(&(pstRPort->stRPortStateLock), ulRPortFlag);
+	     }
+	}
+    
+	UNF_OS_SPIN_UNLOCK_IRQRESTORE(&(pstDisc->stRPortBusyPoolLock), ulDiscFlag);
+
+	return;
+}
