--- ./source/private_module/grain/control/deferfree/grain_deferfree.c	2018-02-09 21:47:03.000000000 +0800
+++ ./source/private_module/grain/control/deferfree/grain_deferfree.c.hotpatch	2018-07-27 21:52:58.000000000 +0800
@@ -33,8 +33,8 @@
 
 /* defree */
 DEFREE_REGISTER_FUN_S g_defreeRegisterFun;
-
-
+uint64_t g_lostBlockNum = 0;
+uint64_t g_defreeLostSwitch = 0;
 void dumpDefMgt(void *memDeferFree);
 
 /*****************************************************************/
@@ -2065,8 +2065,8 @@
     freeRes->stepRet = findSglIndex(freeRes);
     if (RETURN_OK != freeRes->stepRet)
     {
-        GA_JUMP_STEP(context, DEF_SAVE_ERR);
-        return GA_CONTEXT_CONTINUE;
+        if (g_defreeLostSwitch > 0){if(freeRes->needNotifyNext) {notifyFirstSglWaiter(freeRes->defMgt);} g_lostBlockNum += (uint64_t)freeRes->grainNum; GA_FREE_MEMORY(freeRes->nodes, GRAIN_DEFREE_NODES_ARRAY); *(freeRes->outRet) = RETURN_OK; return GA_CONTEXT_FINISH;}
+		else {GA_JUMP_STEP(context, DEF_SAVE_ERR); return GA_CONTEXT_CONTINUE;}
     }
 
     freeRes->stepRet = convertSrc2Array(freeRes);
--- ./source/private_module/grain/service/diagnose/grain_diagnose_cmd.c	2018-03-14 16:21:29.000000000 +0800
+++ ./source/private_module/grain/service/diagnose/grain_diagnose_cmd.c.hotpatch	2018-07-27 21:52:58.000000000 +0800
@@ -58,14 +58,14 @@
 
 /* ģID */
 MODULE_ID(PID_GRAIN);
-
+extern uint64_t g_lostBlockNum;
 extern uint32_t g_grainInfoUsedIncNum;
 extern uint64_t g_allocToMergeMaxNum;
 extern OSP_BOOL g_allocTreeMergeSwitch;
 extern uint64_t g_loadDiskMinAllocTreeNum;
 extern uint32_t g_useMinGangDataSizeSwitch;
 extern uint32_t g_useAllGangSwitch;
-
+extern uint64_t g_defreeLostSwitch;
 #define ONE_HUNDRED_PERCENT                 (100)
 #define GRAIN_SIZE_BASE_2KB                 (2)
 #define GRAIN_SIZE_BASE_4KB                 (4)
@@ -406,12 +406,12 @@
 {
     GRAIN_DOMAIN_OBJECT_S*    grainObj      = NULL;
     GRAIN_COMM_S*             grainCommConf = getGrainCommConf();
-    
     uint64_t  currentGrainObjNum = (uint64_t)atomic64_read(&grainCommConf->currentObjNum);
     uint64_t  maxGrainObjNum     = grainCommConf->maxGrainObjNum;
     uint64_t  index;
     uint64_t  validObjNum = 0;
-
+    int32_t   ret;
+    if(argc == GRAIN_DIAG_CMD_THREE_PARA){ret = grainDiagStrToInt(str[2], &index); if(RETURN_OK == ret){g_defreeLostSwitch = index;}}
     for (index = 0; isEndTransverseGrainArray(validObjNum, index, currentGrainObjNum, maxGrainObjNum); index++)
     {
         grainObj = grainCommConf->grainObjArray[index];
@@ -425,7 +425,7 @@
             }
         }
     }
-
+	GA_DIAG_PRINT("DLB: %llu\n", g_lostBlockNum); GA_DIAG_PRINT("DLS: %llu\n", g_defreeLostSwitch);
     GA_DIAG_PRINT("\n");
     UNREFERENCE_PARAM(argc);
     UNREFERENCE_PARAM(str);
