--- ./source/private_module/ld/ld.c	2018-04-22 08:45:38.000000000 +0000
+++ ./source/private_module/ld/ld.c.hotpatch	2019-10-08 02:38:52.000000000 +0000
@@ -3006,12 +3006,12 @@
 
     return stub_ldPendlistHssd(logicDisk, req, genIo);
 }
-
+void ldProcXnetErrMaskPatch(REQ_S *req, LD_REQ_PRIVATE_INFO* private);
 void ldPrintErrDoneInfo(REQ_S *req, LD_REQ_PRIVATE_INFO* private)
 {
     const char *logHead = (RETURN_DIF_ERROR == req->result) ? BDM_LOG_HEAD_DIF_ERR : BDM_LOG_HEAD_DEAFULT;
     uint64_t key = ((req->objectId << 32) | (uint32_t)(req->result));
-
+    ldProcXnetErrMaskPatch(req, private);
     /*Begin Modified by l00245290 DTS2015052801422 20150528*/ 
     /*ʱIO޷result:IO_ERR_REDUNDANT_ABORTѾERRӡ˴ȥֹ־*/ 
     if (IO_ERR_REDUNDANT_ABORT != req->result)
@@ -5663,3 +5663,32 @@
 /* PC-Lint */
 LD_USE_TRACE_POINT
 
+#define LD_REQ_FWD_XNET_ERR_MASK  (20)
+ 
+void ldProcXnetErrMaskPatch(REQ_S *req, LD_REQ_PRIVATE_INFO* private)
+{
+    const char *logHead = (RETURN_DIF_ERROR == req->result) ? BDM_LOG_HEAD_DIF_ERR : BDM_LOG_HEAD_DEAFULT;
+    BDM_CFG_IO_REDU_TYPE_E ioReduType = BDM_CFG_IO_REDU_TYPE_BUTT;
+    ioReduType = private->ioInfo.ioReduType;
+    int32_t reqOldResult = req->result;
+ 
+    /*IOһתXNETRETURN_IO_BUSY_NEED_RETRY*/
+    if(BDM_CFG_IO_REDU_TYPE_NO_REDU == ioReduType && BDM_TEST_BIT(LD_REQ_FWD_XNET_ERR_MASK, (void*)&private->flag)) {
+        req->result = RETURN_IO_BUSY_NEED_RETRY;
+        BDM_LOG_ERR_CAN_PRINT(LOG_ID_LD_0052, (3*HZ), req->objectId,
+                 "BDMHotpatch:%s, LogicId %llu,LD disk Req(0x%p) done error(old 0x%x,new 0x%x),sgl 0x%p,flag 0x%llx,opcode %u,LBA 0x%llx,type %u.",
+                 logHead,req->objectId, req, reqOldResult, req->result, req->sgl, req->ctrlFlag, req->opCode, req->objectLba, ioReduType);
+    }
+ 
+    /*IOһתXNETIO_ERR_REDUNDANT_ABORT*/
+    if ((BDM_CFG_IO_REDU_TYPE_DEFAULT == ioReduType || BDM_CFG_IO_REDU_TYPE_WITH_REDU == ioReduType)
+        && BDM_TEST_BIT(LD_REQ_FWD_XNET_ERR_MASK, (void*)&private->flag)) {
+        req->result = IO_ERR_REDUNDANT_ABORT;
+        BDM_LOG_ERR_CAN_PRINT(LOG_ID_LD_0052, (3*HZ), req->objectId,
+                 "BDMHotpatch:%s, LogicId %llu,LD disk Req(0x%p) done error(old 0x%x,new 0x%x),sgl 0x%p,flag 0x%llx,opcode %u,LBA 0x%llx,type %u.",
+                 logHead,req->objectId, req, reqOldResult, req->result, req->sgl, req->ctrlFlag, req->opCode, req->objectLba, ioReduType);
+    }
+ 
+    return;
+}
+
--- ./source/private_module/ld/stub_v3/stub_ld.c	2018-04-11 12:46:26.000000000 +0000
+++ ./source/private_module/ld/stub_v3/stub_ld.c.hotpatch	2019-10-08 02:38:52.000000000 +0000
@@ -3733,7 +3733,7 @@
         }
     }
 }
-
+void ldProcXnetErrPatch(REQ_S *req);
 /**************************************************************************
    : ldFwReqDone
      : LDreq תɺ
@@ -3797,11 +3797,11 @@
             private->difInfo.errDifNid, private->difInfo.errDifLinkId, private->difInfo.errDifFlag,
             private->linkInfo, private->lastExeNid,private->firstExeNid, private->diagExeNid);
 
-
         ANY_TRACE_CALL(LD_DISK_REQ_ERROR_TRACE, 0, "BACK_FORWARD_REQ:errorInfo[bdmByte(%u)statusByte(%u)] newErrorInfo[bdmByte(%u)statusByte(%u)] diagErrorInfo[bdmByte(%u)statusByte(%u)]",
             private->errorInfo.bdmByte, private->errorInfo.statusByte,
             private->newErrorInfo.bdmByte, private->newErrorInfo.statusByte,
             private->diagErrorInfo.bdmByte, private->diagErrorInfo.statusByte);
+        ldProcXnetErrPatch(req);
         /* Dorado 5000 modified end */
         if (RETURN_OK != req->result)
         {
@@ -5195,3 +5195,28 @@
 /* PC-Lint */
 LD_USE_TRACE_POINT
 
+#define LD_REQ_FWD_XNET_ERR_MASK  (20)
+ 
+void ldProcXnetErrPatch(REQ_S *req)
+{
+    LD_REQ_PRIVATE_INFO* private = NULL;
+    private = (LD_REQ_PRIVATE_INFO*)(void*)req->producerPrivate;
+ 
+    if((RETURN_OK != req->result && BDM_INNER_ERROR_XNET == private->newErrorInfo.bdmByte)
+        || IO_ERR_LINK_DISCONN == req->result) {
+        BDM_SET_BIT(LD_REQ_FWD_XNET_ERR_MASK, (void*)&private->flag);
+        BDM_LOG_ERR_CAN_PRINT(LOG_ID_LD_0066, (3*HZ), req->objectId,
+                     "BDMHotpatch:LD set disk(%llu) req(0x%p) op(%d) ctrlFlag(0x%llx) prvFlag(0x%x) result(0x%x) bdmByte(%u) flag.",
+                     req->objectId, req, req->opCode, req->ctrlFlag, private->flag, req->result, private->newErrorInfo.bdmByte);
+    } else {
+        if (BDM_TEST_BIT(LD_REQ_FWD_XNET_ERR_MASK, (void*)&private->flag)) {
+            BDM_LOG_ERR_CAN_PRINT(LOG_ID_LD_0066, (3*HZ), req->objectId,
+                         "BDMHotpatch:LD clear disk(%llu) req(0x%p) op(%d) ctrlFlag(0x%llx) prvFlag(0x%x) result(0x%x) bdmByte(%u) flag.",
+                         req->objectId, req, req->opCode, req->ctrlFlag, private->flag, req->result, private->newErrorInfo.bdmByte);
+        }
+        BDM_CLEAR_BIT(LD_REQ_FWD_XNET_ERR_MASK, (void*)&private->flag);
+    }
+ 
+    return;
+}
+
--- ./source/private_module/ld/stub_v3/stub_ld_forward.c	2018-02-09 07:36:26.000000000 +0000
+++ ./source/private_module/ld/stub_v3/stub_ld_forward.c.hotpatch	2019-10-08 02:38:52.000000000 +0000
@@ -1249,9 +1249,9 @@
             //break;
             /*End Modified by w90005722 DTS2015031103947 20150211*/
     } 
-    /*Begin Modified by c00230409 AR.SR.SF-0000248292.008.006 20171213*/
-    private->newErrorInfo.bdmByte = BDM_INNER_ERROR_OK;
-    /*End Modified by c00230409 AR.SR.SF-0000248292.008.006 20171213*/
+
+
+
     return RETURN_OK;
 }
 
