--- ./source/private_module/spc/spc_objmgr/spc_objmgr_clone.c	2018-03-22 07:55:49.000000000 +0000
+++ ./source/private_module/spc/spc_objmgr/spc_objmgr_clone.c.hotpatch	2021-06-15 15:25:35.000000000 +0000
@@ -4302,7 +4302,7 @@
 
     return CONTEXT_PENDING;
 }
-
+extern int32_t resetBonusLocalInfoPatch(SPC_OBJSET_S *objset, SPC_DMN_S *dmn, SGL_S *bnsSgl, uint32_t blkSize);
 /**************************************************************************
      :  bonusдҳ沢ʼ
  :  
@@ -4338,7 +4338,7 @@
             privateData->bonusBuf->sgl->entrys[0].len);
 
     /* ʼbonus */
-    privateData->result = resetBonusLocalInfo(privateData->objset, privateData->dmn, privateData->writeSgl);
+    privateData->result = resetBonusLocalInfoPatch(privateData->objset, privateData->dmn, privateData->writeSgl, SPC_DEFAULT_METAOBJ_BLKSIZE);
 
     holdResetedBonusDone(context);
     return CONTEXT_FINISH;
--- ./source/private_module/spc/spc_objmgr/spc_objmgr_dmn.c	2018-03-27 08:18:40.000000000 +0000
+++ ./source/private_module/spc/spc_objmgr/spc_objmgr_dmn.c.hotpatch	2021-06-15 15:25:35.000000000 +0000
@@ -2137,27 +2137,27 @@
 
 PROC_STAGE STATIC int32_t holdClaimDmnForceCreate(CONTEXT_S *context)
 {
-    HOLD_CLAIM_DMN_RES_S    *res;
-    FORCE_CREATE_DMN_IN_S   *createDmnIn;
-    FORCE_CREATE_DMN_OUT_S  *createDmnOut;
-
+    HOLD_CLAIM_DMN_RES_S    *res; FORCE_CREATE_DMN_IN_S   *createDmnIn; FORCE_CREATE_DMN_OUT_S  *createDmnOut; uint32_t  spaceVersion  = INVALID_VALUE32;
     setSpcStageEnter(g_spcDmnDbgStgCnt, SPC_DMN_DBG_STAGE_HOLD_CLAIM, HOLD_CLAIM_DMN_CREATE);
     res = (HOLD_CLAIM_DMN_RES_S *)getData(context);
-    
-    createDmnIn     = &res->createDmnIn;
-    createDmnOut    = &res->createDmnOut;
-
+    createDmnIn     = &res->createDmnIn; createDmnOut    = &res->createDmnOut;
     createDmnIn->blockSize      = SPC_DEFAULT_METAOBJ_BLKSIZE;
+    spaceVersion = getSpaceRunVersion(GET_SPACE_ID(res->input->objset));    
+    if (unlikely(INVALID_VALUE32 == spaceVersion)) {
+        DBG_LogInfo(DBG_LOGID_NEW, "Create dmn(obsid 0x%llx, objid %llu) get space version failed, spaceId(%llu).",res->objset->obsId, res->objId, GET_SPACE_ID(res->objset));
+        res->result = RETURN_SPACE_EINVAL; holdClaimDmnDone(context); return CONTEXT_FINISH; }
+    /* жϴԼ汾ţԪݶʹôblksize */
+    if (SPACE_FS_VERSION_9 > spaceVersion && !isSpcMetaObject(res->input->objType)) {
+        if (res->input->blockSize <= DEFAULT_BLOCK_SIZE && res->input->blockSize >= SPC_DEFAULT_METAOBJ_BLKSIZE) {
+            createDmnIn->blockSize = res->input->blockSize; } }
     createDmnIn->bonusSgl       = res->input->bonusSgl;
     createDmnIn->dmnMgr         = res->dmnMgr;
     createDmnIn->objectId       = res->objId;
     createDmnIn->objset         = res->objset;
     createDmnIn->objType        = res->input->objType;
     createDmnIn->dmn            = res->dmn;
-    
     createDmnOut->dmn           = NULL;
     createDmnOut->result        = RETURN_ERROR;
-
     forceCreateDmn(createDmnIn, createDmnOut, context);
     return CONTEXT_PENDING;
 }
@@ -6836,7 +6836,7 @@
     
     return CONTEXT_CONTINUE;
 }
-
+extern int32_t resetBonusLocalInfoPatch(SPC_OBJSET_S *objset, SPC_DMN_S *dmn, SGL_S *bnsSgl, uint32_t blkSize);
 /**************************************************************************
      :  ǿƴdmnĵ2ʼbonusҳ
  :  
@@ -6884,7 +6884,7 @@
     }
 
     /* bonusҳбϢ */
-    res->result = resetBonusLocalInfo(res->input->objset, NULL, res->sgl);
+    res->result = resetBonusLocalInfoPatch(res->input->objset, NULL, res->sgl, res->input->blockSize);
     if (unlikely(RETURN_OK != res->result))
     {
         SPC_LOG_ERR(SPC_PRINT_DMN_COMM, DBG_LOG_ERROR, 
@@ -6965,7 +6965,7 @@
     /* عDMNҪDMNڴϢ */
     return CONTEXT_CONTINUE;
 }
-
+extern void resetDmnMgrInfoPatch(DMN_MGR_S *dmnMgr, int32_t objType, SPC_OBJSET_S *objset, uint32_t blkSize);
 /**************************************************************************
      :  ԭDMNڴϢ, vnode/bonusCache
  :  
@@ -6993,7 +6993,7 @@
     destroyDmnBindResource(res->dmn, FALSE, FALSE);
 
     /* dmnMgrϱĶϢ */
-    resetDmnMgrInfo(res->dmn->dmnMgr, dmnPhy->dmnBns.dmnBasic.objectType);
+    resetDmnMgrInfoPatch(res->dmn->dmnMgr, dmnPhy->dmnBns.dmnBasic.objectType, res->objset, dmnPhy->dmnBns.dmnBasic.blkSize);
     
     /* DMNѾdmnMgr, ֻ޸bonusҳе, ޸DMNڴе */
     if (!getSpcDmnBonusFlag(res->sgl->entrys[0].buf, DMN_FLAG_BIG))
@@ -10803,3 +10803,99 @@
 
 #endif
 
+void resetDmnMgrInfoPatch(DMN_MGR_S *dmnMgr, int32_t objType, SPC_OBJSET_S *objset, uint32_t blkSize)
+{
+    uint32_t spaceVersion = INVALID_VALUE32;
+    uint32_t maxBlkSize   = INVALID_VALUE32;  /* ѭܳǰļϵͳСԭ */
+
+    if (unlikely(NULL == dmnMgr))
+    {
+        return;
+    }
+    
+    /* ö */
+    dmnMgr->objType = (SPC_OBJECT_TYPE_E)objType;
+    
+    /* öС */
+    atomic_set(&dmnMgr->objBlkSize, SPC_BYTE_TO_SECTOR(SPC_DEFAULT_METAOBJ_BLKSIZE));
+
+    /* öС */
+    dmnMgr->fsObjSize = 0ULL;
+
+    spaceVersion = getSpaceRunVersion(GET_SPACE_ID(objset));
+    if (unlikely(INVALID_VALUE32 == spaceVersion))
+    {
+        DBG_LogError(DBG_LOGID_NEW, "Get space version failed, obsId 0x%llx.", objset->obsId);
+        return;
+    }
+    
+    if (spaceVersion < SPACE_FS_VERSION_9
+        && !isSpcMetaObject((SPC_OBJECT_TYPE_E)objType)) 
+    {
+        maxBlkSize  = MIN(blkSize, objset->obsCfg->blockSize);        
+        atomic_set(&dmnMgr->objBlkSize, (int32_t)maxBlkSize);
+    }
+
+    return;
+}
+
+int32_t resetBonusLocalInfoPatch(SPC_OBJSET_S *objset, SPC_DMN_S *dmn, SGL_S *bnsSgl, uint32_t blkSize)
+{
+    int32_t     ret     = RETURN_OK;
+    uint32_t    index   = 0;
+    uint32_t    spaceVersion;
+    SPC_DMN_BNS_S *dmnPhyBns = NULL;
+    uint32_t      maxBlkSize = INVALID_VALUE32;  /* ѭܳǰļϵͳСԭ */
+    int32_t       objectType;
+
+    if (unlikely(NULL == objset || NULL == bnsSgl))
+    {
+        return RETURN_SPACE_EINVAL;
+    }
+
+    if (unlikely(IS_ZERO_PAGE(bnsSgl->entrys[0].pageCtrl)))
+    {
+        DBG_LogError(DBG_LOGID_NEW, "The object bonus page can not be zero page.");
+        return RETURN_SPACE_EINVAL;
+    }
+    
+    for (index = 0; index < RESET_OBJECT_BUTT; index++)
+    {
+        ret = resetObjInfoAction[index].resetFunc(objset, dmn, bnsSgl);
+
+        if (unlikely(RETURN_OK != ret))
+        {
+            return ret;
+        }
+    }
+
+    spaceVersion = getSpaceRunVersion(GET_SPACE_ID(objset));
+    if (unlikely(INVALID_VALUE32 == spaceVersion))
+    {
+        DBG_LogError(DBG_LOGID_NEW, "Get space version failed, obsId 0x%llx.", objset->obsId);
+        return RETURN_SPACE_EINVAL;
+    }
+    
+    if (spaceVersion < SPACE_FS_VERSION_9) 
+    {
+        dmnPhyBns   = DMN_GET_BUF_BASIC(bnsSgl->entrys[0].buf);
+        objectType  = dmnPhyBns->dmnBasic.objectType;
+        if (unlikely(objectType > SPC_OT_NUMTYPES))
+        {
+            DBG_LogError(DBG_LOGID_NEW, "Invalid objType(%d), obsId 0x%llx, objId %llu.", 
+                objectType, objset->obsId, dmnPhyBns->dmnBasic.objectId);
+            return RETURN_OK;
+        }
+        
+        if (!isSpcMetaObject((SPC_OBJECT_TYPE_E)objectType)
+            && (blkSize <= DEFAULT_BLOCK_SIZE && blkSize >= BLOCK_SIZE_4K))
+        {
+            maxBlkSize  = objset->obsCfg->blockSize;        
+            dmnPhyBns->dmnBasic.blkSize = MIN(SPC_BYTE_TO_SECTOR(blkSize), maxBlkSize);
+        }
+    }
+
+    return RETURN_OK;
+}
+
+
--- ./source/private_module/spc/spc_objmgr/spc_objmgr_hm.c	2018-02-09 13:47:03.000000000 +0000
+++ ./source/private_module/spc/spc_objmgr/spc_objmgr_hm.c.hotpatch	2021-06-15 15:25:35.000000000 +0000
@@ -846,7 +846,7 @@
     
     return;
 }
-
+extern int32_t resetBonusLocalInfoPatch(SPC_OBJSET_S *objset, SPC_DMN_S *dmn, SGL_S *bnsSgl, uint32_t blkSize);
 /**************************************************************************
      :  
  :  context: 첽
@@ -867,7 +867,7 @@
     res = (WRITE_HM_OBJ_META_RES_S *)getData(context);
 
     /* ԪϢػ */
-    result = resetBonusLocalInfo(res->in->objset, res->in->dmn, res->in->req->sgl);
+    result = resetBonusLocalInfoPatch(res->in->objset, res->in->dmn, res->in->req->sgl, getReqBlockSize(res->in->req->objectType));
     if (unlikely(RETURN_OK != result))
     {
         res->out->result = result;
@@ -2409,7 +2409,7 @@
     
     dmnBasic = (SPC_DMN_BNS_BASIC_S*)(GET_PHYS_BASIC_FROM_REQ(req));
 
-    result = resetBonusLocalInfo(objset, NULL, req->sgl);
+    result = resetBonusLocalInfoPatch(objset, NULL, req->sgl, getReqBlockSize(req->objectType));
     if (unlikely(RETURN_OK != result))
     {
         SPC_LOG_ERR(SPC_PRINT_HM, DBG_LOG_ERROR,
--- ./source/private_module/spc/spc_objmgr/spc_objmgr_object.c	2018-04-27 09:30:05.000000000 +0000
+++ ./source/private_module/spc/spc_objmgr/spc_objmgr_object.c.hotpatch	2021-06-15 15:25:35.000000000 +0000
@@ -7189,7 +7189,7 @@
     
     return CONTEXT_CONTINUE;
 }
-
+extern int32_t resetBonusLocalInfoPatch(SPC_OBJSET_S *objset, SPC_DMN_S *dmn, SGL_S *bnsSgl, uint32_t blkSize);
 /**************************************************************************
      :  ʼbonusҳ
  :  
@@ -7215,7 +7215,7 @@
                             res->input->isBigObject);
 
     /* ʼϢ */
-    res->result = resetBonusLocalInfo(res->objset, res->dstDmn, dstSgl);
+    res->result = resetBonusLocalInfoPatch(res->objset, res->dstDmn, dstSgl, (uint32_t)res->output->result);
     if (unlikely(RETURN_OK != res->result))
     {
         migrateDmnDone(res);
@@ -7237,7 +7237,7 @@
     
     return CONTEXT_CONTINUE;
 }
-
+extern void resetDmnMgrInfoPatch(DMN_MGR_S *dmnMgr, int32_t objType, SPC_OBJSET_S *objset, uint32_t blkSize);
 /**************************************************************************
      :  (7/8) عͻĶDMN
  :  
@@ -7267,7 +7267,7 @@
     memcpy(&res->dstDmn->dmnBasic, dmnBasic, sizeof(SPC_DMN_BNS_BASIC_S));
 
     /* dmnMgrϵĶϢ */
-    resetDmnMgrInfo(res->dstDmn->dmnMgr, res->dstDmn->dmnBasic.objectType);
+    resetDmnMgrInfoPatch(res->dstDmn->dmnMgr, res->dstDmn->dmnBasic.objectType, res->objset, dmnBasic->blkSize);
     
     atomic64_set(&res->dstDmn->objSize, 0LL);
 
--- ./source/private_module/spc/spc_objmgr/spc_objmgr_rep_adapt.c	2018-03-22 07:55:49.000000000 +0000
+++ ./source/private_module/spc/spc_objmgr/spc_objmgr_rep_adapt.c.hotpatch	2021-06-15 15:25:35.000000000 +0000
@@ -1383,7 +1383,7 @@
         return CONTEXT_CONTINUE;
     }
 }
-
+extern int32_t resetBonusLocalInfoPatch(SPC_OBJSET_S *objset, SPC_DMN_S *dmn, SGL_S *bnsSgl, uint32_t blkSize);
 PROC_STAGE STATIC int32_t writeRepDmnLockChk(CONTEXT_S* context)
 {
     WRITE_REP_REQ_RES_S     *privateData = NULL;
@@ -1422,8 +1422,8 @@
      */
     if (B_TRUE == privateData->writeBonus)
     {
-        privateData->result = resetBonusLocalInfo(privateData->input->objset, 
-                                                  privateData->input->dmn, privateData->input->dataReq->sgl);
+        privateData->result = resetBonusLocalInfoPatch(privateData->input->objset, 
+                                                  privateData->input->dmn, privateData->input->dataReq->sgl, getReqBlockSize(privateData->input->dataReq->objectType));
         if (unlikely(RETURN_OK != privateData->result))
         {
             SPC_LOG_ERR(SPC_PRINT_REP_ADAPT, DBG_LOG_ERROR,
