--- ./source/private_module/sys/cls/cls_init.c	2018-04-15 04:13:01.000000000 +0000
+++ ./source/private_module/sys/cls/cls_init.c.hotpatch	2023-04-27 03:42:33.000000000 +0000
@@ -1504,3 +1504,46 @@
     return;
 }
 
+void eccStormHandlePatchsph052(uint32_t para)
+{
+    nid_t nodeId = getLocalNid();
+    int32_t retVal = RETURN_ERROR;
+    CMM_DATA_CHECK_INFO_S cmmCheckInfo = {{0}};
+
+    DBG_LogWarning(DBG_LOGID_NEW, "ECC_STORM_patch: Local node(%d) Receive ECC Storm event,Start redundancy Check.",
+                     nodeId);
+
+    /*ACʱϱECC籩,*/
+    if(getNodeACFlag())
+    {
+        DBG_LogWarning(DBG_LOGID_NEW, "ECC_STORM_patch: Redundancy Check: Local node(%d) have acflag ,not handle it.",
+                     nodeId);
+        return ;
+    }
+    /*ѯͬ߼Ƿڹ*/
+    if(B_TRUE == isGroupOtherNodeFaultForReset(nodeId))
+    {
+         DBG_LogWarning(DBG_LOGID_NEW, "ECC_STORM_patch: Redundancy Check: Local node(%d) check Other Controller in Engine is fault ,not handle it.",
+                     nodeId);
+        return ;
+    }
+     /* нڵ㣬Ƿڴо*/
+    retVal = checkCmmDataHaveMirror(&cmmCheckInfo);
+    if (RETURN_OK != retVal)
+    {
+        DBG_LogWarning(DBG_LOGID_NEW, "ECC_STORM_patch: Redundancy Check: Get node mirror info failed.");
+        return ;
+    }
+    if (B_TRUE != cmmCheckInfo.nodeIdList[nodeId])
+    {
+        DBG_LogWarning(DBG_LOGID_NEW, "ECC_STORM_patch: Redundancy Check: Local node(%d) dirty data has no mirror.\n", nodeId);
+        return ;
+    }
+    DBG_LogWarning(DBG_LOGID_NEW, "ECC_STORM_patch: Redundancy Check: Local node(%d) redundancy Check Over , return OK.",
+                     nodeId);
+
+    panic("ECC_STORM_patch: NODE_PANIC_RESET: Local node(id %u) need panic reset.", nodeId);
+
+    return;
+}
+EXPORT_SYMBOL(eccStormHandlePatchsph052);
