--- ./source/private_module/core/common/xnet_rsp.c	2020-04-29 18:42:28.835841612 +0800
+++ ./source/private_module/core/common/xnet_rsp.c.hotpatch	2020-05-07 14:31:52.272894000 +0800
@@ -135,7 +135,7 @@
                      NULL);
     return; 
 }
-
+extern OSP_U64 g_ullXrbPatch4Jiffies;
 /*****************************************************************************
      : XNET_IsRspTimeOutNeedMove
    : жϽڵǷҪɾ
@@ -143,17 +143,17 @@
    : 
    ֵ  : ɹ RETURN_OK
              ʧ RETURN_ERROR
- 
- ޸ʷ      :
-  1.       : 2015811
-           : lijinghuan
-    ޸   : ɺ
-
 *****************************************************************************/
 OSP_S32 XNET_IsRspTimeOutNeedMove(XNET_HT_PARAM_S *v_pHtParam)
 {
     XNET_RESPONSE_S *pstResponse;
 
+    if (unlikely(0 == g_ullXrbPatch4Jiffies))
+    {
+        g_ullXrbPatch4Jiffies = jiffies;
+        XNET_LIMIT_PRINT(LINFO, DBG_LOGID_BUTT, LI, LN, "Xnet patch jiffies now is (%llu).", g_ullXrbPatch4Jiffies);
+    }
+
     pstResponse = (XNET_RESPONSE_S *)(v_pHtParam->pResponse);
     if (NULL == pstResponse)
     {
@@ -163,7 +163,7 @@
     }
 
     /* ʱ󣬼볬ʱ */
-    if (unlikely((jiffies - pstResponse->ullStartTimeJiffies) > pstResponse->uiTimeOut))
+    if (unlikely(time_after((OSP_ULONG)jiffies, (OSP_ULONG)(pstResponse->ullStartTimeJiffies + pstResponse->uiTimeOut))))
     {
          return RETURN_OK;
     }
--- ./source/private_module/core/xrb/xrb_v2allocpage.c	2020-04-29 18:42:28.863841612 +0800
+++ ./source/private_module/core/xrb/xrb_v2allocpage.c.hotpatch	2020-05-07 14:31:52.272894000 +0800
@@ -51,15 +51,15 @@
 /*----------------------------------------------*
  * ݽṹ                                     *
  *----------------------------------------------*/
-
-/*----------------------------------------------*
- * ⲿԭ˵                             *
- *----------------------------------------------*/
-
-/*----------------------------------------------*
- * ڲԭ˵                             *
- *----------------------------------------------*/
-
+typedef struct tagXRB_V2_LOCAL_SGL_S_PATCH1
+{
+    struct list_head stLocalSglList;
+    OSP_U32  uiTransno;
+    OSP_U16  usAllocPid;
+    OSP_U16  usMagic;   /* ʶǷȫ,ȫֻͷſ */
+    DRV_SGL  *pstLocalSgl;
+    OSP_VOID *pContext;
+} XRB_V2_LOCAL_SGL_S_PATCH1;
 /*----------------------------------------------*
  * ⲿ˵                                 *
  *----------------------------------------------*/
@@ -329,20 +329,10 @@
     return;
 }
 
+extern OSP_U16 g_usXrbLocalMagic;
+extern OSP_U64 g_ullXrbPatch1Jiffies;
 /*****************************************************************************
-     : XRB_V2AllocSglCB
    : SGL&PAGE Ļص
-   : DRV_SGL *v_pstSgl   
-             OSP_VOID *v_pstIbd    
-             OSP_VOID *v_pContext  
-   : 
-   ֵ  : 
- 
- ޸ʷ      :
-  1.       : 2015810
-           : lijinghuan
-    ޸   : ɺ
-
 *****************************************************************************/
 OSP_VOID XRB_V2AllocSglCB(DRV_SGL *v_pstSgl, OSP_VOID *v_pIbd, OSP_VOID *v_pContext)
 {
@@ -363,7 +353,6 @@
     if (unlikely(NULL == v_pIbd))
     {
         XNET_LIMIT_PRINT(LERR, DBG_LOGID_BUTT, LI, LN, "Input ibd is NULL.");
-
         return;
     }
 
@@ -391,7 +380,6 @@
         XRB_IncDiscardIo(pstIbdHead->usDstPid);
         XRB_DelAndFreeInternalTimeOutContext(pstInterTimeoutCtx);
         XRB_V2NoticeSrcCtrlAllocSglResFail(pstConn, pstMsg);
-
         return;
     }
     
@@ -402,12 +390,10 @@
         XNET_LIMIT_PRINT(LERR, DBG_LOGID_BUTT, LI, LN, 
                          "Conn(%u) check response timeout error, pid(%u) dstnid(%u).",
                          XLTL_GetConnId(pstConn), pstReplyAllocSgl->usAllocPid, usDstNid);
-
         XRB_STATISTIC_BY_RESULT(usDstNid, usAllocPid, XRB_COUNTER_ALLOC_SGL, XNET_SEND_FAIL);
         XRB_IncDiscardIo(pstIbdHead->usDstPid);      
         XRB_ProcAllocSglError(v_pstSgl, pstReplyAllocSgl->usAllocPid, v_pContext);
         XRB_V2NoticeSrcCtrlAllocSglResFail(pstConn, pstMsg);
-            
         return;
     }
 
@@ -418,12 +404,10 @@
                          "Conn(%u) alloc page number wrong, apply(%u) alloc(%u) pid(%u).",
                          XLTL_GetConnId(pstConn), pstReplyAllocSgl->usPageNum, v_pstSgl->NumSgesInChain,
                          pstReplyAllocSgl->usAllocPid);
-
         XRB_STATISTIC_BY_RESULT(usDstNid, usAllocPid, XRB_COUNTER_ALLOC_SGL, XNET_SEND_FAIL);
         XRB_IncDiscardIo(pstIbdHead->usDstPid);      
         XRB_ProcAllocSglError(v_pstSgl, pstReplyAllocSgl->usAllocPid, v_pContext);
         XRB_V2NoticeSrcCtrlAllocSglResFail(pstConn, pstMsg);
-       
         return;
     }    
     pstIbdHead->uiAllocSglTransno = pstReplyAllocSgl->uiSglTransno;
@@ -435,12 +419,10 @@
         XNET_LIMIT_PRINT(LERR, DBG_LOGID_BUTT, LI, LN, 
                          "Conn(%u) calc SGL datalen fail, pid(%u) dstnid(%u).",
                          XLTL_GetConnId(pstConn), pstReplyAllocSgl->usAllocPid, usDstNid);
-
         XRB_STATISTIC_BY_RESULT(usDstNid, usAllocPid, XRB_COUNTER_ALLOC_SGL, XNET_SEND_FAIL);
         XRB_IncDiscardIo(pstIbdHead->usDstPid);    
         XRB_ProcAllocSglError(v_pstSgl, pstReplyAllocSgl->usAllocPid, v_pContext);
         XRB_V2NoticeSrcCtrlAllocSglResFail(pstConn, pstMsg);
-        
         return;
     }
 
@@ -450,11 +432,29 @@
         pstRpagePool = &pstConn->stRpage;
         XRB_V2InsertAllocPageToHash(pstRpagePool, v_pstSgl, pstReplyAllocSgl->usPageNum);
         pstIbdHead->ucRpageType = XRB_RPAGE_ALLOC_TYPE;
-
         XNET_SetMsgItlDscpCode(pstMsg, ITL_DSCP_CODE_CS7);
     }
     else
     {
+        if (unlikely(0 == g_ullXrbPatch1Jiffies))
+        {
+            g_ullXrbPatch1Jiffies = jiffies;
+            XNET_LIMIT_PRINT(LINFO, DBG_LOGID_BUTT, LI, LN, "Xnet patch jiffies now is (%llu).", g_ullXrbPatch1Jiffies);
+        }
+
+        pstLocalSgl = XRB_V2GetLocalSglNode(pstConn, pstReplyAllocSgl->uiSglTransno);
+        while (pstLocalSgl != NULL)
+        {
+            /* ȫlocal sglֻͷſ,ͷҳ */
+            DBG_LogError(DBG_LOGID_BUTT, "Conn(%u) Clear local SGL, magic(%u, %u) allocpid(%u) transno(%u) NumSgesInChain(%u).",
+                         XLTL_GetConnId(pstConn), ((XRB_V2_LOCAL_SGL_S_PATCH1 *)pstLocalSgl)->usMagic, g_usXrbLocalMagic, 
+                         pstLocalSgl->usAllocPid, pstLocalSgl->uiTransno, pstLocalSgl->pstLocalSgl->NumSgesInChain);
+            XRB_FreeDstAddrShell(pstLocalSgl->pstLocalSgl, XRB_NOT_RPAGE_POOL_TYPE);
+
+            XRB_V2FreeLocalSglNode(pstConn, pstLocalSgl);
+            pstLocalSgl = XRB_V2GetLocalSglNode(pstConn, pstReplyAllocSgl->uiSglTransno);
+        }
+
         /* ڱlocal SGLĽڵ */    
         pstLocalSgl = XRB_V2AllocLocalSglNode(pstConn, pstReplyAllocSgl->usAllocPid);
         if (NULL == pstLocalSgl)
@@ -473,9 +473,9 @@
         /* Զ˵SGLڱ */
         pstLocalSgl->uiTransno = pstReplyAllocSgl->uiSglTransno;
         pstLocalSgl->usAllocPid = pstReplyAllocSgl->usAllocPid;
+        ((XRB_V2_LOCAL_SGL_S_PATCH1 *)pstLocalSgl)->usMagic = g_usXrbLocalMagic;
         pstLocalSgl->pstLocalSgl = v_pstSgl;
         pstLocalSgl->pContext = v_pContext;
-
         XLTL_AddNodeToInternalTimeOutList(&pstLocalSgl->stLocalSglList, 
                                           &pstConn->stXrbInterPool.stLocalSglPool.stTimeoutList);
 
--- ./source/private_module/core/xrb/xrb_v2localsgl.c	2020-04-29 18:42:28.875841612 +0800
+++ ./source/private_module/core/xrb/xrb_v2localsgl.c.hotpatch	2020-05-07 14:31:52.272894000 +0800
@@ -25,43 +25,24 @@
 #include "xrb_modid.h"
 
 /*----------------------------------------------*
- * 궨                                       *
- *----------------------------------------------*/
-
-/*----------------------------------------------*
  * ݽṹ                                     *
  *----------------------------------------------*/
-
-/*----------------------------------------------*
- * ڲԭ˵                             *
- *----------------------------------------------*/
-
-/*----------------------------------------------*
- * ⲿ˵                                 *
- *----------------------------------------------*/
-
-/*----------------------------------------------*
- * ȫֱ                                     *
- *----------------------------------------------*/
-
-/*----------------------------------------------*
- * ڲʵ                                 *
- *----------------------------------------------*/
- 
+typedef struct tagXRB_V2_LOCAL_SGL_S_PATCH2
+{
+    struct list_head stLocalSglList;
+    OSP_U32  uiTransno;
+    OSP_U16  usAllocPid;
+    OSP_U16  usMagic;   /* ʶǷȫ,ȫֻͷſ */
+    DRV_SGL  *pstLocalSgl;
+    OSP_VOID *pContext;
+} XRB_V2_LOCAL_SGL_S_PATCH2;
+
+extern OSP_U16 g_usXrbLocalMagic;
+extern OSP_U64 g_ullXrbPatch2Jiffies;
+OSP_VOID XRB_FreeDstAddrShell(OSP_VOID *v_pstDstShell, OSP_U8 v_ucPageType);
 /*****************************************************************************
      : XRB_V2ClearLocalSglNode
    : LOCAL SGLڵ
-   : XLTL_INTERNAL_POOL_S *v_pstInternalPool
-             OSAL_stListHead *v_pstEntry
-             OSP_VOID *v_pParam 
-   : 
-   ֵ  : 
- 
- ޸ʷ      :
-  1.       : 2015810
-           : lijinghuan
-    ޸   : ɺ
-
 *****************************************************************************/
 OSP_VOID XRB_V2ClearLocalSglNode(XLTL_INTERNAL_POOL_S *v_pstInternalPool, 
                                  OSAL_stListHead *v_pstEntry, 
@@ -69,15 +50,34 @@
 {
     XRB_V2_LOCAL_SGL_S *pstLocalSgl;
 
+    if (unlikely(0 == g_ullXrbPatch2Jiffies))
+    {
+        g_ullXrbPatch2Jiffies = jiffies;
+        XNET_LIMIT_PRINT(LINFO, DBG_LOGID_BUTT, LI, LN, "Xnet patch jiffies now is (%llu).", g_ullXrbPatch2Jiffies);
+    }
+
     OSAL_ListDel(v_pstEntry);
     pstLocalSgl = OSAL_ListEntry(v_pstEntry, XRB_V2_LOCAL_SGL_S, stLocalSglList);
 
-    XNET_LIMIT_PRINT(LINFO, DBG_LOGID_BUTT, LI, LN, "Clear local SGL, allocpid(%u) transno(%u).",
-                     pstLocalSgl->usAllocPid, pstLocalSgl->uiTransno);
-    
-    /* ֪ͨҵͷSGL&PAGEͷŽṹԴ */
-    XRB_ProcAllocSglError(pstLocalSgl->pstLocalSgl, pstLocalSgl->usAllocPid, pstLocalSgl->pContext);
+    if (((XRB_V2_LOCAL_SGL_S_PATCH2 *)pstLocalSgl)->usMagic == g_usXrbLocalMagic) 
+    {
+        XNET_LIMIT_PRINT(LINFO, DBG_LOGID_BUTT, LI, LN, "Clear local SGL, magic(%u, %u) allocpid(%u) transno(%u) NumSgesInChain(%u).",
+                         ((XRB_V2_LOCAL_SGL_S_PATCH2 *)pstLocalSgl)->usMagic, g_usXrbLocalMagic, 
+                         pstLocalSgl->usAllocPid, pstLocalSgl->uiTransno, pstLocalSgl->pstLocalSgl->NumSgesInChain);
+
+        /* ֪ͨҵͷSGL&PAGEͷŽṹԴ */
+        XRB_ProcAllocSglError(pstLocalSgl->pstLocalSgl, pstLocalSgl->usAllocPid, pstLocalSgl->pContext);
+    }
+    else
+    {
+        /* ȫlocal sglֻͷſ,ͷҳ */
+        DBG_LogError(DBG_LOGID_BUTT, "Clear local SGL, magic(%u, %u) allocpid(%u) transno(%u) NumSgesInChain(%u).",
+                     ((XRB_V2_LOCAL_SGL_S_PATCH2 *)pstLocalSgl)->usMagic, g_usXrbLocalMagic, 
+                     pstLocalSgl->usAllocPid, pstLocalSgl->uiTransno, pstLocalSgl->pstLocalSgl->NumSgesInChain);
+        XRB_FreeDstAddrShell(pstLocalSgl->pstLocalSgl, XRB_NOT_RPAGE_POOL_TYPE);
+    }
 
+    ((XRB_V2_LOCAL_SGL_S_PATCH2 *)pstLocalSgl)->usMagic = 0;
     UTIL_PUT_OBJ_TO_POOL(v_pstInternalPool->pstXnetMemPool, pstLocalSgl);
     UNREFERENCE_PARAM(v_pParam);
     
@@ -144,10 +144,10 @@
   1.       : 20151021
            : yangyong
     ޸   : ɺ
-
 *****************************************************************************/
 OSP_VOID XRB_V2FreeLocalSglNode(XLTL_CONN_S *v_pstConn, XRB_V2_LOCAL_SGL_S *v_pstLocalSgl)
 {
+    ((XRB_V2_LOCAL_SGL_S_PATCH2 *)v_pstLocalSgl)->usMagic = 0;
     UTIL_PUT_OBJ_TO_POOL(v_pstConn->stXrbInterPool.stLocalSglPool.pstXnetMemPool, v_pstLocalSgl);
 }
     
--- ./source/private_module/core/xrb/xrb_v2rsp.c	2020-04-29 18:42:28.859841612 +0800
+++ ./source/private_module/core/xrb/xrb_v2rsp.c.hotpatch	2020-05-07 14:31:52.272894000 +0800
@@ -216,7 +216,7 @@
     
     return;
 }
-
+OSP_S32 XRB_V2IsRspTimeOutNeedMove_Patch(XNET_HT_PARAM_S *v_pHtParam);
 /*****************************************************************************
      : XRB_V2ConnRspTimeOutCheck
    : ڲhashʱṹ
@@ -247,7 +247,7 @@
             OSAL_ListForEachSafe(pstEntry, pstNext, &pstPeer->stDataList)
             {
                 pstConn = OSAL_ListEntry(pstEntry, XLTL_CONN_S, stPeerEntry);
-                XRB_V2TraverseMove(pstConn, XRB_V2IsRspTimeOutNeedMove, TRUE);
+                XRB_V2TraverseMove(pstConn, XRB_V2IsRspTimeOutNeedMove_Patch, TRUE);
             }
             OSAL_READ_UNLOCK(&pstPeer->stConnLock);
         }
@@ -282,6 +282,47 @@
     return pstResponse;
 }
 
+extern OSP_U64 g_ullXrbPatch3Jiffies;
+/*****************************************************************************
+     : XRB_V2IsRspTimeOutNeedMove
+   : жϽڵǷҪɾ
+   : XNET_HT_PARAM_S *v_pHtParam  
+   : 
+   ֵ  : OSP_S32 RETURN_OK:ɹ, RETURN_ERROR:ʧ
+ 
+ ޸ʷ      :
+  1.       : 2015811
+           : lijinghuan
+    ޸   : ɺ
+
+*****************************************************************************/
+OSP_S32 XRB_V2IsRspTimeOutNeedMove_Patch(XNET_HT_PARAM_S *v_pHtParam)
+{
+    XNET_RESPONSE_S *pstResponse;
+
+    if (unlikely(0 == g_ullXrbPatch3Jiffies))
+    {
+        g_ullXrbPatch3Jiffies = jiffies;
+        XNET_LIMIT_PRINT(LINFO, DBG_LOGID_BUTT, LI, LN, "Xnet patch jiffies now is (%llu).", g_ullXrbPatch3Jiffies);
+    }
+
+    pstResponse = (XNET_RESPONSE_S *)(v_pHtParam->pResponse);
+    if (NULL == pstResponse)
+    {
+        DBG_LogError(DBG_LOGID_BUTT, "Response of hash table param is NULL.");
+        
+        return RETURN_ERROR;
+    }
+
+    /* ʱ󣬼볬ʱ */
+    if (unlikely(time_after((OSP_ULONG)jiffies, (OSP_ULONG)(pstResponse->ullStartTimeJiffies + pstResponse->uiTimeOut))))
+    {
+         return RETURN_OK;
+    }
+
+    return RETURN_ERROR;
+}
+
 #ifdef __cplusplus
 #if __cplusplus
 }
