--- ./source/private_module/bdm/features/sas_timeout/ld_linktest.c	2018-03-14 11:05:13.000000000 +0000
+++ ./source/private_module/bdm/features/sas_timeout/ld_linktest.c.hotpatch	2022-11-07 08:00:29.000000000 +0000
@@ -371,8 +371,10 @@
 
     return;
 }
-
-
+#define BDM_MS_TO_JIFFIES(t) ((uint64_t)(t)*HZ / 1000)
+#define HOST_IO_DEADLINE   (3500)  /* λms, 3.5S */
+extern bool SdTimeOutAdjustSwitchStat(void);
+extern bool bdmIsSsdDiskByType(uint32_t diskType);
 /******************************************************************************
    : ldLinkTestFwdReqStart
      : תļIO·
@@ -380,7 +382,6 @@
  : 
    ֵ: RETURN_OKɹ
            RETURN_ERRORʧ
-     : 
 ******************************************************************************/
 int32_t ldLinkTestFwdReqStart(REQ_S *req)
 {
@@ -405,17 +406,17 @@
         (void)REQ_DONE(req);
         return RETURN_ERROR;
     }
-
     /*οҵIOóʱʱ*/
     private = (LD_REQ_PRIVATE_INFO*)(void*)req->producerPrivate;
-    (void)logicDisk->backendOps->fillDeadTime2Req(childReq,
-        (uint64_t)private->actionInfo.timeOut);
-    sioSetReqFirstTimeout(childReq,
-        ((private->actionInfo.timeOut)/1000)*HZ);
-
+    if (SdTimeOutAdjustSwitchStat() && bdmIsSsdDiskByType(logicDisk->diskType)) {
+        (void)logicDisk->backendOps->fillDeadTime2Req(childReq, BDM_MS_TO_JIFFIES(HOST_IO_DEADLINE));
+        sioSetReqFirstTimeout(childReq, (uint32_t)BDM_MS_TO_JIFFIES(HOST_IO_DEADLINE)); /* תHZ */
+    } else {
+        (void)logicDisk->backendOps->fillDeadTime2Req(childReq, (uint64_t)private->actionInfo.timeOut);
+        sioSetReqFirstTimeout(childReq, ((private->actionInfo.timeOut)/1000)*HZ);
+    }
     /*linkInfoϢSIO£MPڱذĬ㷨ѡ·*/
     sioSetReqLinkInfo(childReq, 0);
-
     IOD_ADD_STARTQ(childReq);
     return RETURN_OK;
 }
@@ -876,16 +877,16 @@
         (void)REQ_DONE(req);
         return RETURN_ERROR;
     }
-
     private = (LD_REQ_PRIVATE_INFO*)(void*)req->producerPrivate;
-    /*οҵIOóʱʱ*/
-    (void)logicDisk->backendOps->fillDeadTime2Req(childReq,
-        (uint64_t)private->actionInfo.timeOut);
-    sioSetReqFirstTimeout(childReq, private->actionInfo.timeOut / 1000 * HZ);
-    /* linkInfoϢSIOʹøREQеlinkInfoϣ··*/
+    if (SdTimeOutAdjustSwitchStat() && bdmIsSsdDiskByType(logicDisk->diskType)) {
+        (void)logicDisk->backendOps->fillDeadTime2Req(childReq, BDM_MS_TO_JIFFIES(HOST_IO_DEADLINE));
+        sioSetReqFirstTimeout(childReq, (uint32_t)BDM_MS_TO_JIFFIES(HOST_IO_DEADLINE)); /* תHZ */
+    } else {
+        (void)logicDisk->backendOps->fillDeadTime2Req(childReq, (uint64_t)private->actionInfo.timeOut);
+        sioSetReqFirstTimeout(childReq, ((private->actionInfo.timeOut)/1000)*HZ);
+    }
     sioSetReqLinkInfo(childReq, private->linkInfo);
     private->lastExeNid = localNid;
-
     IOD_ADD_STARTQ(childReq);
     return RETURN_OK;
 }
@@ -1951,5 +1952,4 @@
     }
 
     return;
-}
-
+}
\ No newline at end of file
--- ./source/private_module/bdm/ld/stub_v3/stub_ld.c	2018-04-11 12:46:26.000000000 +0000
+++ ./source/private_module/bdm/ld/stub_v3/stub_ld.c.hotpatch	2022-11-07 08:00:29.000000000 +0000
@@ -710,7 +710,8 @@
     
     if (isDisk)
     {
-        ret = LD_REQ_DIF_VERIFY(req, OP_WRITE, DIF_VERIFY_LEVEL_TRACE);

+        ret = LD_REQ_DIF_VERIFY(req, OP_WRITE, DIF_VERIFY_LEVEL_TRACE);
+
         /* Dorado 5000 modified begin */
         ANY_TRACE_CALL(LD_DIF_HANDLE_TRACE, 3, "[LD_DIF_H]Req(0x%p) op(%u) from LDID(%llu) forward dif verify result(%d).",
                         req, req->opCode, req->objectId, ret);
@@ -1775,15 +1776,17 @@
     }
 }
 /*End DTS2017111801777 y00378818 2017.11.18*/
-
+#define BDM_MS_TO_JIFFIES(t) ((uint64_t)(t)*HZ / 1000)
+#define HOST_IO_DEADLINE   (3500)  /* λms, 3.5S */
+extern bool SdTimeOutAdjustSwitchStat(void);
+extern bool bdmIsSsdDiskByType(uint32_t diskType);
+void ldDiskReqSetChildReqInfoHotPatch(REQ_S *req, LD_REQ_PRIVATE_INFO* private);
 /**************************************************************************
    : ldDiskReqSetDefaultInfo
      : sd req
  : REQ_S* req : req
                         REQ_S *childReq : ²req
  : 
-   ֵ: 
-     : 
 **************************************************************************/
 int32_t stub_ldDiskReqSetChildReqInfo(REQ_S *req, REQ_S *childReq)
 {
@@ -1802,17 +1805,17 @@
     }
     /*End DTS2018010511782 c00271321 20171226*/
     childReq->ctrlFlag = req->ctrlFlag;
-
     ldDiskTestReqEmittedMask(childReq, private);
-    
-    /*TIMEʱ*/
     ANY_TRACE_CALL(LD_DISK_REQ_ERROR_TRACE, 0, "LD disk req(0x%p) set timeout:childReq(0x%p), timeout(%llu).", 
                 req, childReq, (uint64_t)private->actionInfo.timeOut);
-    /*Begin Modified by l00245290 DTS2017030914278 20170309*/
-    (void)logicDisk->backendOps->fillDeadTime2Req(childReq, (uint64_t)((private->actionInfo.timeOut)/1000)*2*HZ);
-    /*End Modified by l00245290 DTS2017030914278 20170309*/
-
-    sioSetReqFirstTimeout(childReq, ((private->actionInfo.timeOut)/1000)*HZ);/*תHZ*/
+    if (SdTimeOutAdjustSwitchStat() &&
+        bdmIsSsdDiskByType(logicDisk->diskType) && (req->opCode == OP_READ || req->opCode == OP_WRITE)) {
+        (void)logicDisk->backendOps->fillDeadTime2Req(childReq, BDM_MS_TO_JIFFIES(HOST_IO_DEADLINE));
+        sioSetReqFirstTimeout(childReq, (uint32_t)BDM_MS_TO_JIFFIES(HOST_IO_DEADLINE)); /* תHZ */
+    } else {
+		(void)logicDisk->backendOps->fillDeadTime2Req(childReq, (uint64_t)((private->actionInfo.timeOut)/1000)*2*HZ);
+		sioSetReqFirstTimeout(childReq, ((private->actionInfo.timeOut)/1000)*HZ);/*תHZ*/
+    }
     /* linkInfoϢSIO */
     sioSetReqLinkInfo(childReq, private->linkInfo);
 
@@ -1839,16 +1842,7 @@
             req->result = BDM_IO_ERROR;
             memset(&private->newErrorInfo, 0, sizeof(CFG_ERR_INFO_S));
             private->newErrorInfo.bdmByte = BDM_INNER_ERROR_NO_PATH;
-            if (BDM_TEST_BIT(LD_REQ_FWD_MASK, (void*)&private->flag))
-            {
-                /* DTS2016022407985 modify by y00376877 20160803 begin */
-                BDM_IOD_ADD_DONEQ(req);
-                /* DTS2016022407985 modify by y00376877 20160803 end */
-            }
-            else
-            {
-                ldDiskReqInquiryStrategy(req);
-            }
+            ldDiskReqSetChildReqInfoHotPatch(req, private);
             return RETURN_ERROR;
         }
         sdFlushHungIO((uint32_t)childReq->objectId, FALSE);
@@ -2701,7 +2695,8 @@
         
         if (RETURN_OK == req->result)
         {
-            ret = LD_REQ_DIF_VERIFY(req, OP_READ, DIF_VERIFY_LEVEL_TRACE);

+            ret = LD_REQ_DIF_VERIFY(req, OP_READ, DIF_VERIFY_LEVEL_TRACE);
+
             /* Dorado 5000 modified begin */
             ANY_TRACE_CALL(LD_DIF_HANDLE_TRACE, 1, "[LD_DIF_H]Req(0x%p) op(%u) from LDID(%llu) dif verify result(%d).", req, req->opCode, req->objectId, ret);
             /* Dorado 5000 modified end */
@@ -3304,7 +3299,8 @@
             ldPrintEhInfo(selfReq, childReq);
         }
 
-        /* Dorado 5000 modified begin */

+        /* Dorado 5000 modified begin */
+
         ldCopyDiagErrorInfo(logicDisk, selfReq);
         /* Dorado 5000 modified end */
     }
@@ -3702,7 +3698,8 @@
     /* תдIO DIFҪ½DIFУ飬УʧֱӷأҪһ */
     if (BDM_INNER_ERROR_FWD_DIF == private->newErrorInfo.bdmByte)
     {
-        ret = LD_REQ_DIF_VERIFY(req, OP_WRITE, DIF_VERIFY_LEVEL_CRITICAL);

+        ret = LD_REQ_DIF_VERIFY(req, OP_WRITE, DIF_VERIFY_LEVEL_CRITICAL);
+
         /* Dorado 5000 modified begin */
         ANY_TRACE_CALL(LD_DIF_HANDLE_TRACE, 3, "[LD_DIF_H]Req(0x%p) op(%u) from LDID(%llu) forword io back error, dif verify result(%d).", req,req->opCode, req->objectId, ret);
         /* Dorado 5000 modified end */
@@ -5195,3 +5192,15 @@
 /* PC-Lint */
 LD_USE_TRACE_POINT
 
+void ldDiskReqSetChildReqInfoHotPatch(REQ_S *req, LD_REQ_PRIVATE_INFO* private)
+{
+    if (test_bit(LD_REQ_FWD_MASK, (void*)&private->flag))
+    {
+        IOD_ADD_DONEQ(req);
+    }
+    else
+    {
+        ldDiskReqInquiryStrategy(req);
+    }
+    return;
+}
