--- ./source/private_module/lun_remote_mirror/deliver/rm_dlv_receive.c	2018-04-10 14:10:38.000000000 +0000
+++ ./source/private_module/lun_remote_mirror/deliver/rm_dlv_receive.c.hotpatch	2022-03-29 12:39:40.000000000 +0000
@@ -4193,3 +4193,58 @@
 
 
 
+#define RMDLV_TIME_ONCE_SCHE 1000           /*ʱִмʱ λ: ms*/
+void checkIbcWaitingListAndExecNew(void)
+{
+    RMDLV_WAITING_SEND_IBC_INFO_S *msgDescInfo = NULL;
+    struct list_head* pstPos = NULL;
+    struct list_head* pstNext = NULL;
+    RM_MSG_HEAD_S *rmMsg = NULL;
+    
+    spin_lock(&(g_waitSendToOtherCtrlList.spinlock));
+    list_for_each_safe(pstPos, pstNext, &(g_waitSendToOtherCtrlList.head))
+    {
+        msgDescInfo = (RMDLV_WAITING_SEND_IBC_INFO_S *)list_entry(pstPos, RMDLV_WAITING_SEND_IBC_INFO_S, head);
+        rmMsg = (RM_MSG_HEAD_S*)msgDescInfo->buffer;
+        DBG_LogDebug(RM_LOG_ID_0870,"List Ibc waiting node opcode(%d) time(%d) dstId(%d)", rmMsg->uiMsgCode, msgDescInfo->waitRspTime, msgDescInfo->sendCtrlId);
+        if (rmMsg->uiMsgCode == RM_MSG_META_IO)
+        {
+            if ((msgDescInfo->waitRspTime > RMDLV_SEND_TO_REMOTE_RSP_TIME) || (msgDescInfo->waitRspTime == 0))
+            {
+                msgDescInfo->waitRspTime = RMDLV_SEND_TO_REMOTE_RSP_TIME - RMDLV_TIME_ONCE_SCHE;
+            }
+            else if ((msgDescInfo->waitRspTime > RMDLV_TIME_ONCE_SCHE) && (msgDescInfo->waitRspTime <= RMDLV_SEND_TO_REMOTE_RSP_TIME))
+            {
+                msgDescInfo->waitRspTime = msgDescInfo->waitRspTime - RMDLV_TIME_ONCE_SCHE;
+            }
+            else
+            {
+                list_del(pstPos);
+                g_waitSendToOtherCtrlList.sum--;
+                RSF_PUT_FREE_NODE(msgDescInfo, RM_TRANSMIT_IBC_WAITING_PARTITION);
+                putFreeEbcByRmMsg(rmMsg);
+                putRmMsgDlvRm(rmMsg);
+            }
+        }
+    }
+    if (RM_SEND_IBC_MAX_NUM <= atomic_read(&g_currentSendIbcNum))
+    {
+        spin_unlock(&(g_waitSendToOtherCtrlList.spinlock));
+        return;
+    }
+    if (list_empty(&g_waitSendToOtherCtrlList.head))
+    {
+        spin_unlock(&(g_waitSendToOtherCtrlList.spinlock));
+        return;
+    }
+    
+    pstPos = g_waitSendToOtherCtrlList.head.next;
+    list_del(pstPos);
+    g_waitSendToOtherCtrlList.sum--;
+    msgDescInfo = list_entry(pstPos, RMDLV_WAITING_SEND_IBC_INFO_S, head);
+    spin_unlock(&(g_waitSendToOtherCtrlList.spinlock));
+
+    msgDescInfo->sendRetHandle(msgDescInfo);
+
+    return;
+}
--- ./source/private_module/lun_remote_mirror/task_manage/public/rm_pub_util.c	2018-03-10 06:52:19.000000000 +0000
+++ ./source/private_module/lun_remote_mirror/task_manage/public/rm_pub_util.c.hotpatch	2022-03-29 12:39:40.000000000 +0000
@@ -2282,7 +2282,7 @@
     msgDescInfo->buffer = sendRmMsg;
     msgDescInfo->sendCtrlId = ctrlId;
     msgDescInfo->sendRetHandle = sendIbcPubAsyncMsgToCtrlRm;
-
+    msgDescInfo->waitRspTime = RMDLV_SEND_TO_REMOTE_RSP_TIME;
     isNeedAddToWaitingList= isUpperLimitAndAddToWaitingListRm(msgDescInfo);
     if (TRUE == isNeedAddToWaitingList)
     {
--- ./source/private_module/lun_remote_mirror/task_manage/rm_mng_main.c	2018-04-10 14:10:38.000000000 +0000
+++ ./source/private_module/lun_remote_mirror/task_manage/rm_mng_main.c.hotpatch	2022-03-29 12:39:40.000000000 +0000
@@ -769,7 +769,7 @@
     return;
 }
 
-
+void checkIbcWaitingListAndExecNew(void);
 /**********************************************************************
 *     : IODʱͬʱ,Եÿһһ
 * : context: ָöʱpairRM_CTR_Sָ
@@ -780,12 +780,12 @@
 void checkTimeOutEventLoop(void* ctx)
 {
     UNREFERENCE_PARAM(ctx);
-
     /* ȴԶкеĶʱ */
     taskWaitListTimingHandleRm();  
 
     /* ¼*/
     checkRmUrgentEventTimer();
+    checkIbcWaitingListAndExecNew();
     return;
 }
 
