--- ./source/private_module/spa/meta_backup/backup_file_log.c	2018-02-09 13:47:03.000000000 +0000
+++ ./source/private_module/spa/meta_backup/backup_file_log.c.hotpatch	2018-10-18 13:27:31.000000000 +0000
@@ -5292,7 +5292,7 @@
     IOD_ADD_DONEQ(req);
     return;    
 }
-
+int32_t queryExtentInfoBatchIntf(poolid_t poolId, volumeid_t volumeId,uint8_t extentNum,extentid_t *extentIdArray,EXTENT_INFO_S *extentInfoArray,void *context,void (*callBack)(EXTENT_INFO_S *extentInfo,void *context,int32_t result));
 /**************************************************************************
     :  ȡ־еĵ
 :  CKG_INFO_S *ckgInfo, 
@@ -5311,7 +5311,6 @@
     extentid_t extentId;
     uint64_t volumeId;
     uint8_t extentNum;
-
     switch (pLogCMD->cmdType)
     {
         case MBCP_LOG_CMD_ALLOC_EXT_FROM_CKG:      /*ckg info */
@@ -5348,7 +5347,9 @@
                 jmpToStep(req, LOG_STEP_TO_MEM);
             }
             break;
-        case MBCP_LOG_CMD_ALLOC_GRAIN_FROM_EXTENT:   /*ҪextentId extent info,һֻһ */
+        case MBCP_LOG_CMD_ALLOC_GRAIN_FROM_EXTENT:   
+            {poolId = pLogCMD->logCtx.metaKey.poolId;volumeId = pLogCMD->logCtx.metaKey.volumeId;  extentNum  = (uint8_t)pLogCMD->logCtx.itemNum; result = queryExtentInfoBatchIntf(poolId, GET_VOL_PARENT_ID(volumeId), extentNum,pLogCMD->logData.extentId,(EXTENT_INFO_S*)PVT_MDBK_LOG_EXTENT_INFO_OUT(req),(void *)req, writeLogQueryExtentInfoCb);}
+            break;
         case MBCP_LOG_CMD_ALLOC_NODE_FROM_THINLUN_META_EXT:
             {
                 poolId      = pLogCMD->logCtx.metaKey.poolId;
@@ -5391,7 +5392,6 @@
                 DBG_LogError(META_BACKUP_FILE_LOG_ID_1434, "Unexpected cmd type (%u)!",pLogCMD->cmdType);
             }
     }
-
     return result;
 }
 
--- ./source/private_module/spa/spa_debug.c	2018-04-26 08:06:00.000000000 +0000
+++ ./source/private_module/spa/spa_debug.c.hotpatch	2018-10-18 13:27:31.000000000 +0000
@@ -2247,7 +2247,7 @@
 {
     UNREFERENCE_PARAM(result);
     UNREFERENCE_PARAM(context);
-        
+    if (NULL == context){return;}DBG_LogDebug(DBG_LOGID_NEW, "Delete extent info from cache return %d.", result);    
     return; 
 }
 
--- ./source/private_module/spa/space_mgr/extent_mgr_intf.c	2018-02-09 13:47:03.000000000 +0000
+++ ./source/private_module/spa/space_mgr/extent_mgr_intf.c.hotpatch	2018-10-18 13:27:31.000000000 +0000
@@ -3859,16 +3859,18 @@
     uint8_t *userinfo = NULL;/* ftds */
     CONTEXT_S          *initExtInfoContext  = NULL;
     CONTEXT_S          **tmpContext  = NULL;
-
     context = PVT_SPA_EXT_CONTEXT(req);
     initExtentInfo = PVT_SPA_EXT_INIT_EXTENT(req);
     outPara = PVT_SPA_EXT_OUT_PARA(req);
     callBack = (PFN_QUERY_EXTENT_BITMAP_CALLBACK)(ptrdiff_t)PVT_SPA_EXT_CALLBACK(req);
     volumeObj = PVT_SPA_EXT_META_OBJ(req);
-
+    if (NULL != PVT_SPA_EXT_EXTENT_INFO(req))
+    {        
+        DBG_LogDebug(DBG_LOGID_NEW, "Query extent(poolid %u volumeid 0x%llx extentid 0x%llx) init bitmap 0x%llx, result %d",
+                    PVT_SPA_EXT_POOL_ID(req), PVT_SPA_EXT_VOLUME_ID(req), PVT_SPA_EXT_EXTENT_ID(req),
+                    initExtentInfo->initBitmap[0], req->result);
+    }
     memcpy(outPara, initExtentInfo->initBitmap, sizeof(initExtentInfo->initBitmap));
-
-    /* ftds */
     spaReqTraceRecord(req, SPA_FTDS_LOCATIONID_SPACEMGR_QUERYEXTENT_BITAP, &userinfo);
     if (NULL != userinfo)
     {
@@ -3877,7 +3879,6 @@
                          volumeObj->key.volumeId, PVT_SPA_EXT_EXTENT_ID(req));
     }
     copyTraceKey2Trace(getTraceFromReq(req), spaGetTraceFromContext(context));
-
     if (RETURN_OK != req->result)
     {
         SPA_LIMIT_PRINT_ERROR(SPACE_MGR_ID01B9, "Query extent(0x%llx) of volume(0x%llx) bitmap"
@@ -3902,7 +3903,6 @@
     
     freeContext(initExtInfoContext);
     initExtInfoContext = NULL;
-
     return;
 }
 
@@ -6539,7 +6539,6 @@
     initExtentInfo = (INIT_EXTENT_INFO_S *)getData(initExtInfoContext);
     tmpContext = (CONTEXT_S **)(void *)((char *)initExtentInfo + sizeof(INIT_EXTENT_INFO_S) * SPACE_MGR_BATCH_OP_NUM);
     *tmpContext = initExtInfoContext;
-    
     req->opCode = OP_QUERY_EXTENT_BITMAP;
     PVT_SPA_EXT_POOL_ID(req)        = poolId;
     PVT_SPA_EXT_META_OBJ(req)       = volObj;
@@ -6550,9 +6549,10 @@
     PVT_SPA_EXT_CALLBACK(req)       = (uint64_t)(ptrdiff_t)callBack;
     PVT_SPA_EXT_OUT_PARA(req)       = bitmap;    
     PVT_SPA_EXT_BATCH_OP_NUM(req)   = 1;
+    PVT_SPA_EXT_CKG_ID(req)         = 1;
+    PVT_SPA_EXT_EXTENT_INFO(req)    = (void *)((char *)initExtentInfo + sizeof(INIT_EXTENT_INFO_S) * (SPACE_MGR_BATCH_OP_NUM - 1)); /* extentinfoλ */
     /*  */
     ADD_RECE_INTF_OP_NUM(req->opCode);
-
     initQueryExtentBitmapAction(req);
     SCHEDULE_SPACE_EXTENT_REQ(req);
     
--- ./source/private_module/spa/space_mgr/extent_mgr_meta.c	2018-02-09 13:47:03.000000000 +0000
+++ ./source/private_module/spa/space_mgr/extent_mgr_meta.c.hotpatch	2018-10-18 13:27:31.000000000 +0000
@@ -181,7 +181,7 @@
 
     return RETURN_OK;
 }
-
+int32_t retryQueryBitmap(REQ_S *req);
 /**************************************************************************
      :  ѯExtent ʼʱMetaеǷΪȫFFֻID
  :  void *meta: Ԫ
@@ -215,7 +215,7 @@
     }
     return RETURN_OK;
 }
-
+int32_t calcQueryResult(REQ_S *req);
 /**************************************************************************
      :  ѯǨƵExtentʱMetaеǷΪȫFFֻID
  :  void *meta: Ԫ
@@ -241,7 +241,7 @@
     }
     return RETURN_OK;
 }
-
+int32_t queryExtentInfoBatchIntf(poolid_t poolId,volumeid_t volumeId,uint8_t extentNum,extentid_t *extentIdArray,EXTENT_INFO_S *extentInfoArray,void *context,void (*callBack)(void *extentInfo,void *context,int32_t result));
 /**************************************************************************
      :  ѯCkg Free ExtentʱMetaеǷΪȫFFֻID
  :  void *meta: Ԫ
@@ -270,7 +270,7 @@
     
     return RETURN_OK;
 }
-
+void spaDebugPreAllocCkgCallback(void *context, int32_t result);
 /**************************************************************************
     :  data extentϢzoneindexֶ
 :  extentInfoArray -extentinfoб
@@ -305,7 +305,7 @@
 
     return;
 }
-
+int32_t delExtentInfoFromMCacheForSpa(poolid_t diskPoolId,volumeid_t volumeId,uint64_t *metaObjIds, uint32_t extentNum, void *context, void (*callBack)(void *context, int32_t result));
 /**************************************************************************
      :  ԪcommѯĻص
  :  void *meta: Ԫ
@@ -322,33 +322,38 @@
     uint32_t opNum;
     uint32_t len;
     int32_t ret;
-
+    bool condition;
     req = (REQ_S *)context; 
-
     if (RETURN_OK != result)
     {
         SPA_LIMIT_PRINT_ERROR(SPACE_MGR_ID0313, 
                               "Get meta operation failed, result(0x%x).", result);
-        
         req->result = result;        
         (void)metaActionDone(req);
         return;
     }
-    
-    /* ѯʱָKeyֵڣB+ֵΪOKmetaеΪ
-     * ȫFFҪִ
-     */   
-    /* ѯMetaǷΪȫFFֻKeyֵ */
     metaObj = PVT_SPA_EXT_META_OBJ(req); 
     opNum   = PVT_SPA_EXT_BATCH_OP_META_NUM(req);
-    
     switch (metaObj->key.type)
     {
         case MOBJ_VOL_EXTENT:
             ret = checkVolumeExtentMeta(meta, opNum, req->parent);
             break;
-        case MOBJ_VOL_EXTENT_INIT_SET:
+        case MOBJ_VOL_EXTENT_INIT_SET:  
+            condition = (NULL != PVT_SPA_EXT_EXTENT_INFO(req) && 0 == PVT_SPA_EXT_CKG_ID(req) && NULL != req->parent && OP_QUERY_EXTENT_BITMAP == req->parent->opCode && 1 == opNum);
+            if (condition)
+            {   
+                ret = calcQueryResult(req);break;
+            }
             ret = checkExtentInitMeta(meta, opNum, req->parent);
+            condition = (RETURN_ERROR == ret && PVT_SPA_EXT_CKG_ID(req) == 1 && NULL != PVT_SPA_EXT_EXTENT_INFO(req) && NULL != req->parent && OP_QUERY_EXTENT_BITMAP == req->parent->opCode && 1 == opNum);
+            if (condition)
+            {
+                DBG_LogDebug(DBG_LOGID_NEW, "Query bit map(poolid %u vol 0x%llx extentid 0x%llx) extent %p ckid %u req %p opcode %u opnum %u",
+                    PVT_SPA_EXT_POOL_ID(req), PVT_SPA_EXT_VOLUME_ID(req), *(extentid_t *)PVT_SPA_EXT_BATCH_OP_KEY(req), PVT_SPA_EXT_EXTENT_INFO(req), PVT_SPA_EXT_CKG_ID(req), req ,req->parent->opCode, opNum);
+                PVT_SPA_EXT_CKG_ID(req) = 0;req->result = RETURN_ERROR;
+                ret = retryQueryBitmap(req); if (ret == RETURN_OK){return;}else{ret = RETURN_ERROR;}
+            }
             break;
         case MOBJ_VOL_MIGRATE_EXTENT:
             ret = checkMigrateExtentMeta(meta, opNum);
@@ -362,7 +367,6 @@
             ret = RETURN_ERROR;
             break;
     }
-    
     if (RETURN_OK != ret)
     {
         if (RETURN_NO_META == ret)
@@ -375,17 +379,13 @@
             req->result = RETURN_ERROR;
         }
     }
-    
-    /* C99 HVSzoneindexϢ */
     if (MOBJ_VOL_EXTENT == metaObj->key.type)
     {
         correctDataExtentZoneIndex((EXTENT_INFO_S *)meta, 
                                    (extentid_t *)PVT_SPA_EXT_BATCH_OP_KEY(req), 
                                    opNum);
     }
-
     (void)metaActionDone(req);    
-
     return;
 }
 
@@ -3012,3 +3012,52 @@
 /* poolռend */
 /* HVS ADD END */
 
+int32_t calcQueryResult(REQ_S *req)
+{
+    EXTENT_INFO_S *extentInfo = (EXTENT_INFO_S *)PVT_SPA_EXT_EXTENT_INFO(req);
+    INIT_EXTENT_INFO_S *initExtentInfo = (INIT_EXTENT_INFO_S *)PVT_SPA_EXT_BATCH_OP_META(req);
+    
+    SPA_LIMIT_PRINT_INFO(SPACE_MGR_ID0313, "Query the volumeid 0x%llx extent 0x%llx 0x%llx init flag %u return %d.",
+                           PVT_SPA_EXT_VOLUME_ID(req), PVT_SPA_EXT_EXTENT_ID(req), extentInfo->extentId, 
+                            extentInfo->initFlag, req->result);
+    if (req->result != RETURN_OK)
+    {
+        return RETURN_ERROR;
+    }
+    
+    if (extentInfo->initFlag)
+    {   
+        memset(initExtentInfo->initBitmap, 0xff, sizeof(initExtentInfo->initBitmap));
+        if (req->result == RETURN_ERROR)
+        {
+            req->result = RETURN_OK;
+        }
+        SPA_LIMIT_PRINT_INFO(DBG_LOGID_NEW, "Set the volumeid 0x%llx extent 0x%llx 0x%llx init bit map to 0x%llx return ok %d.",
+                           PVT_SPA_EXT_VOLUME_ID(req), PVT_SPA_EXT_EXTENT_ID(req), extentInfo->extentId, 
+                           initExtentInfo->initBitmap[0], req->result); 
+        return RETURN_OK;
+    }
+    else
+    {
+        SPA_LIMIT_PRINT_ERROR(DBG_LOGID_NEW, "Set the volumeid 0x%llx extent 0x%llx 0x%llx init bitmap return error.",
+                           PVT_SPA_EXT_VOLUME_ID(req), extentInfo->extentId, initExtentInfo->extentId);
+        return RETURN_ERROR;
+    }
+}
+
+int32_t retryQueryBitmap(REQ_S *req)
+{
+    int ret;
+    SPA_LIMIT_PRINT_INFO(DBG_LOGID_NEW, "Retry query extent info(poolid %u volumeid 0x%llx extent id 0x%llx info %p).", 
+                        PVT_SPA_EXT_POOL_ID(req),  PVT_SPA_EXT_VOLUME_ID(req), *(extentid_t *)PVT_SPA_EXT_BATCH_OP_KEY(req), 
+                        (EXTENT_INFO_S *)PVT_SPA_EXT_EXTENT_INFO(req));
+                        
+    (void)delExtentInfoFromMCacheForSpa(PVT_SPA_EXT_POOL_ID(req), GET_VOL_PARENT_ID(PVT_SPA_EXT_VOLUME_ID(req)),
+                            (extentid_t *)PVT_SPA_EXT_BATCH_OP_KEY(req), 1, req, spaDebugPreAllocCkgCallback);
+    
+    ret = queryExtentInfoBatchIntf(PVT_SPA_EXT_POOL_ID(req),  GET_VOL_PARENT_ID(PVT_SPA_EXT_VOLUME_ID(req)),
+                    1, (extentid_t *)PVT_SPA_EXT_BATCH_OP_KEY(req), (EXTENT_INFO_S *)PVT_SPA_EXT_EXTENT_INFO(req),
+                req, metaCommQueryOperateCallBack);
+    return ret;
+}
+
--- ./source/private_module/spa/space_mgr/extent_mgr_obj.c	2018-02-09 13:47:03.000000000 +0000
+++ ./source/private_module/spa/space_mgr/extent_mgr_obj.c.hotpatch	2018-10-18 13:27:31.000000000 +0000
@@ -1581,7 +1581,6 @@
     {
         metaOpCode = QUERY_META;
     }
-
     poolId   = PVT_SPA_EXT_POOL_ID(req);
     volumeId = PVT_SPA_EXT_VOLUME_ID(req);
     /* VOLUME EXTENT TREEmeta key */
@@ -1602,10 +1601,8 @@
     {
         opMetaInfo.keyArray  = PVT_SPA_EXT_BATCH_OP_KEY(req);
     }
-   
     /* meta genio */
     setMetaGenio(&genIo, req, metaOpCode, &objKey, &opMetaInfo);
-
     /* MetaReq */
     childReq = genExtMgrMetaReq(&genIo, &ret);   
     if (NULL == childReq)
@@ -1617,7 +1614,10 @@
 
         return RETURN_ERROR;
     }
-
+    if (OP_QUERY_EXTENT_BITMAP == req->opCode)
+    {

+        PVT_SPA_EXT_CKG_ID(childReq) = PVT_SPA_EXT_CKG_ID(req);
+    }
     childReq->parent = req;
     atomic_inc(&req->notBackNum); 
 
