--- ./source/private_module/ctrl/sys/cls/cls_obj_bdm.c	2018-02-09 07:36:26.000000000 +0000
+++ ./source/private_module/ctrl/sys/cls/cls_obj_bdm.c.hotpatch	2018-10-17 07:04:22.000000000 +0000
@@ -1892,7 +1892,7 @@
     /* ֻҪ˶ʼֻ̣᷵OKڷOKͷ */
     if (RETURN_OK == retVal)
     {
-        LVOS_mutex_unlock(&g_stClsFlagStatus.readMutex);
+        //LVOS_mutex_unlock(&g_stClsFlagStatus.readMutex);
         SET_ACTION_RESULT(task, RETURN_OK);
     }
     else if (NEW_DISK_IN == retVal)
@@ -1922,11 +1922,9 @@
     uint32_t index = 0;
     int32_t retVal = RETURN_ERROR;
     uint32_t offset = getOffsetOfDirtyDataFlag();
-    uint64_t startLba = (offset / BYTE_PER_SECTOR);
     nid_t localNid = INVALID_NID;
     uint32_t diskNum = INVALID_VALUE32;
     diskid_t tmpDisk[MAX_SPECIAL_DISK] = {0};
-    void * tempDirtyDataFlag = NULL;
     NODE_FAULT_DIRTY_DATA_FLAG_S* setDirtyDataFlagTask = NULL;
     /* ȡȡDBƫƣDBڽϵʼLBA */
 
@@ -1941,17 +1939,9 @@
 
     setDirtyDataFlagTask = (NODE_FAULT_DIRTY_DATA_FLAG_S *)task;
 
-    /* ʱڴ */
-    tempDirtyDataFlag = mallocRsvMem(SYS_RSV_MEM_TYPE_DIRTY_DATA_FLAG, BYTES_PER_PAGE_PI);
-    if (unlikely(NULL == tempDirtyDataFlag))
-    {
-        DBG_LogError(DBG_LOGID_NEW, "Alloc dirty data flag memory buffer failed.");
-        TASK_CALL_ACTION_DONE_ASYNC_WITH_RESULT(task, RETURN_ERROR);
-        return RETURN_ERROR;
-    }
 
-    /* ʱڴŵTaskTaskOverʱͷ */
-    setDirtyDataFlagTask->dataBuf = tempDirtyDataFlag;
+    /* ϲҪʱڴ棬TaskOverʱͷ */
+    setDirtyDataFlagTask->dataBuf = NULL;
     
     localNid = getLocalNid();
 
@@ -1976,24 +1966,34 @@
     /* 1 ĸ̽룬Ҫָ */
     /* 2 ĸǽڵ̽룬ʧ */    
     /* 3 ֻҪɹȡһ̣̳ɹ */   
-    LVOS_mutex_lock(&g_stClsFlagStatus.readMutex);
-    SET_ACTION_CHILDNUM(task, (int32_t)MAX_SPECIAL_DISK);
-    for (index = 0; index < MAX_SPECIAL_DISK; index++)
-    {
-        DBG_LogInfo(DBG_LOGID_NEW, "CLS_NODE_FAULT: Read dirty data flag from disk(id %u), slotId(%u),start lba(%llu), read len(%u).",
-                tmpDisk[index], index, startLba, sizeof(DIRTY_DATA_FLAG_S));
-        retVal = ldReadSpecDisk(index, DISK_PARTITION_DB, (uint64_t)offset, 
-                        (DIRTY_DATA_FLAG_S *)tempDirtyDataFlag+index, sizeof(DIRTY_DATA_FLAG_S), 
-                        (void*)task, nodeFaultReadFlagCallBack);
+    for (index = 0; index < diskNum; index++)
+    {
+        /* Ч϶ȡ */
+        if(INVALID_DISK_ID == tmpDisk[index])
+        {
+            DBG_LogInfo(DBG_LOGID_NEW, "CLS_NODE_FAULT: Not read dirty data flag from invalid disk(slotId %u).", index);
+            continue;
+        }
+        
+        DBG_LogInfo(DBG_LOGID_NEW, "CLS_NODE_FAULT: Read dirty data flag from disk(id %u), slotId(%u),start offset(%u), read len(%u).",
+                tmpDisk[index], index, offset, sizeof(DIRTY_DATA_FLAG_S));
+        
+        retVal = readDataFromMediumSub(tmpDisk[index], offset, sizeof(DIRTY_DATA_FLAG_S), &(setDirtyDataFlagTask->dirtyDataFlag[index]));
+        /* ʧܲͳһںд */
         if(RETURN_OK != retVal)
         {
             DBG_LogWarning(DBG_LOGID_NEW, 
                            "CLS_NODE_FAULT: Read dirty flag failed(%d).", 
                            retVal); 
-            TASK_CALL_ACTION_CHILDDONE(task, RETURN_OK);
             continue;
         }
+        
+        /* øݱǶȡɹ */
+        setDirtyDataFlagTask->isReadDisk[index] = B_TRUE;
     }
+    
+    TASK_CALL_ACTION_DONE_ASYNC_WITH_RESULT(task, RETURN_OK);
+    
     return RETURN_OK;
 }
 
--- ./source/private_module/ctrl/sys/strategy/flow_strategy/flow_sm/flow_obj/flow_obj_status.c	2018-03-10 11:58:34.000000000 +0000
+++ ./source/private_module/ctrl/sys/strategy/flow_strategy/flow_sm/flow_obj/flow_obj_status.c.hotpatch	2018-10-16 13:45:59.000000000 +0000
@@ -289,8 +289,8 @@
     }
 
     nodeServiceStatusName = getFlowNodeSrvStatusName(nodeServiceStatus);
-
-    SYSCTRL_PRINT_LIMIT(SYS_CTRL_INTERVAL, SYS_CTRL_LOG_COUNT, DBG_LOG_INFO, DBG_LOGID_NEW, 
+    //־Ƶ1ӡ1־
+    SYSCTRL_PRINT_LIMIT(604800 * HZ, 1, DBG_LOG_INFO, DBG_LOGID_NEW, 
                         "FLOW_OBJ_STATUS: Get node bitmap(0x%x) by flow service status(name %s) succeeded.", 
                         *nodeBitMap, nodeServiceStatusName);
 
