--- ./source/private_module/lun/lun_io/lun_io_proc.c	2018-04-19 08:47:18.000000000 +0000
+++ ./source/private_module/lun/lun_io/lun_io_proc.c.hotpatch	2022-12-24 04:35:57.000000000 +0000
@@ -16835,7 +16835,7 @@
 
     return RETURN_OK;
 }
-
+void sendMediumErrorAlarm4DifErrPatch(REQ_S *req);
 /**************************************************************************
      :  DIFУʧܺ޸
  :  req:д
@@ -17052,7 +17052,7 @@
                      req->objectLba, req->length, req->opCode,
                      ioPrivateInfo->difCheckResult);
         /* ⵥ: DTS2014031301820 ־ by l90006726 20140320 end */
-
+        sendMediumErrorAlarm4DifErrPatch(req);
         req->result = RETURN_DIF_ERROR;
         devLunSetCounter(LUN_IO_DIF_CONTER_STEP_READ_PAIR_NO_BST);
     }
--- ./source/private_module/lun/lun_mgmt/lun_mgmt_intf.c	2018-04-17 02:50:07.000000000 +0000
+++ ./source/private_module/lun/lun_mgmt/lun_mgmt_intf.c.hotpatch	2022-12-24 04:35:57.000000000 +0000
@@ -30232,3 +30232,77 @@
     return isTRUE;
 }
 
+#define ALM_RAID_SYS_HAS_MEDIUM_ERROR 0xF000B0140ULL
+bool canSendBstAlarm(void);
+void sendAlarmAndBstEventPatch(REQ_S *req)
+{
+    int32_t ret;
+    lunid_t devLunId;
+    OBJ_USERPOOL_STATIC_INFO_S staticInfo;
+    INNER_LUN_CTRL_S *pLunCtrl;
+
+    devLunId = (lunid_t)req->objectId;
+    pLunCtrl = &g_innerLunCtrlArray[devLunId];
+
+    ret = getUserPoolStaticInfoIntf(pLunCtrl->userPoolId, &staticInfo);
+    if (RETURN_OK != ret)
+    {
+        return;
+    }
+
+    if (g_globalLunBstSwitch)
+    {
+        (void)ALM_SendAlarmEx(PID_DEV_LUN,
+                             ALM_RAID_SYS_HAS_MEDIUM_ERROR,
+                             ALM_ALARM_TYPE_FAULT,
+                             "");
+    }
+    else
+    {
+        /* δBSTΪδ¼·BST¼ */
+        spin_lock(&pLunCtrl->spLock);
+        /* ⵥ: AR-0000671058 []Ż, l90005707, 20140120, begin */
+        if ((0 == vols_test_bit(LUN_IO_HAS_BST, (void *)&(pLunCtrl->lunRwFlag)))
+            && (0 == vols_test_bit(LUN_IO_HAS_SEND_BST_EVENT, (void *)&(pLunCtrl->lunRwFlag))))
+        {
+            vols_set_bit(LUN_IO_HAS_SEND_BST_EVENT, (void *)&(pLunCtrl->lunRwFlag));
+        /* ⵥ: AR-0000671058 []Ż, l90005707, 20140120, end */
+            spin_unlock(&pLunCtrl->spLock);
+            /* ϵͳƷ¼ */
+            ret = EVENT_SENDEVENT(EVENT_LUN_BST, &devLunId, sizeof(lunid_t));
+            if (unlikely(RETURN_OK != ret))
+            {
+                spin_lock(&pLunCtrl->spLock);
+                SPACE_CLEAR_BIT(LUN_IO_HAS_SEND_BST_EVENT, (void *)&(pLunCtrl->lunRwFlag));
+                spin_unlock(&pLunCtrl->spLock);
+            }
+        }
+        else
+        {
+            spin_unlock(&pLunCtrl->spLock);
+        }
+
+        if (canSendBstAlarm())
+        {
+            (void)ALM_SendAlarmEx(PID_DEV_LUN,
+                                  ALM_RAID_LUN_MEDIUM_ERROR_WITH_LBA,
+                                  ALM_ALARM_TYPE_FAULT,
+                                  "%u, %s, %u, %s, %llu, %u ",
+                                  devLunId,
+                                  g_innerLunCtrlArray[devLunId].lunName,
+                                  g_innerLunCtrlArray[devLunId].userPoolId,
+                                  staticInfo.userPoolName,
+                                  req->objectLba,
+                                  req->length);
+        }
+    }
+    return;
+}
+
+void sendMediumErrorAlarm4DifErrPatch(REQ_S *req)
+{
+    if (DIF_REPAIR_TYPE_RETURN_ERROR == GET_DIF_REPAIR_TYPE()) {
+        sendAlarmAndBstEventPatch(req);
+    }
+    return;
+}
