--- ./source/private_module/spa/meta_layout/capacity_interface.c	2018-02-09 13:47:03.000000000 +0000
+++ ./source/private_module/spa/meta_layout/capacity_interface.c.hotpatch	2021-02-20 10:03:02.000000000 +0000
@@ -8232,7 +8232,7 @@
 
     return RETURN_OK;
 }
-
+extern bool g_lunFsMetaCapCheckSwitch;
 /*******************************************************************************
 *     : FS/LUNǣڼstorage poolԪݿռǷ㹻
 * : diskPoolId              disk pool id
@@ -8322,7 +8322,7 @@
                      diskPoolId);
             
         /* һ㼶ʣռǷڵ2G㣬Ϊпռ */
-        if (zoneCap.freeCapacity >= GB_TO_SECTOR(2))
+        if (zoneCap.freeCapacity >= GB_TO_SECTOR(2) || FALSE == g_lunFsMetaCapCheckSwitch)
         {
             return RETURN_OK;
         }
@@ -8379,7 +8379,7 @@
                      SECTOR_TO_MB(zoneCap.totalCapacity),
                      SECTOR_TO_MB(zoneCap.freeCapacity),
                      diskPoolId);    
-        if (zoneCap.freeCapacity >= GB_TO_SECTOR(2))
+        if (zoneCap.freeCapacity >= GB_TO_SECTOR(2) || FALSE == g_lunFsMetaCapCheckSwitch)
         {
             /* tier */
             if (RETURN_OK != queryLDPTierCapInfo(diskPoolId, GET_ZONE_TIER_TYPE(zoneId[index]), &localTierCap))
@@ -8395,7 +8395,7 @@
                          SECTOR_TO_MB(localTierCap.totalCapacity),
                          SECTOR_TO_MB(localTierCap.freeCapacity),
                          diskPoolId);
-            if (localTierCap.freeCapacity >= GB_TO_SECTOR(2))
+            if (localTierCap.freeCapacity >= GB_TO_SECTOR(2) || FALSE == g_lunFsMetaCapCheckSwitch)
             {
                 hasValidTier = TRUE;
                 break;
--- ./source/private_module/spa/spa_debug.c	2018-04-26 08:06:00.000000000 +0000
+++ ./source/private_module/spa/spa_debug.c.hotpatch	2021-02-20 10:03:02.000000000 +0000
@@ -1546,7 +1546,7 @@
     
     return FALSE;
 }
-
+void setCreationLunCheckSwitch(uint32_t optBits, char *createLunSwitchStr);
 /**************************************************************************
      :  ѯzoneCKG
  :  argc:           
@@ -1569,12 +1569,11 @@
     int32_t  metaExtentQuota = 0;
     int32_t ret;
     uint64_t paramvalue = INVALID_VALUE64;
-
-    while ((result = DBG_GetOpt(argc, argv, "p:z:", &opt)) != -1)
+    char *createLunSwitchStr = NULL;
+    while ((result = DBG_GetOpt(argc, argv, "p:z:s:", &opt)) != -1)
     {
         if ('p' == result)
         {
-           // poolId = (uint8_t)LVOS_StrToU64(opt.szOptArg);
             ret = DBG_GetParamU64(opt.szOptArg, &paramvalue);
             poolId = (poolid_t)paramvalue;
             DEBUG_IN_CYCLE_RET_CHECK(ret, poolId);
@@ -1585,23 +1584,26 @@
         {
             zoneId = (zoneid_t)LVOS_StrToU64(opt.szOptArg);
             DBG_SetOpt(&optBits, 'z');
-        }
-        else
-        {
+        } else if ('s' == result) {
+            createLunSwitchStr = opt.szOptArg;
+            DBG_SetOpt(&optBits, 's');
+        } else {
             DBG_PrintBuf("spa zoneckgextnum\n\nusage:\nspa zoneckgextnum <-p pool id>"
-            "<-z zone id>\n\nparameter:\n<-p ?>\t\tPool ID\n<-z ?>"
-            "\t\tZone ID\n\n");
+            "<-z zone id>\nspa zoneckgextnum <-s switch>\n\nparameter:\n<-p ?>\t\tPool ID\n<-z ?>\t\tZone ID\n<-s ?>\t\t"
+            "LUN creation check switch(open|close|query)\n\n");
             return;
         }
     }
-    if (!(DBG_TESTOPT_EXT(optBits, 'p') & DBG_TESTOPT_EXT(optBits, 'z')))
-    {
-        DBG_PrintBuf("spa zoneckgextnum\n\nusage:\nspa zoneckgextnum<-p pool id>"
-            "<-z zone id>\n\nparameter:\n<-p ?>\t\tPool ID\n<-z ?>"
-            "\t\tZone ID\n\n");
+    if (DBG_TESTOPT_EXT(optBits, 's')) {
+        setCreationLunCheckSwitch(optBits, createLunSwitchStr);
+        return;
+    }
+    if (!(DBG_TESTOPT_EXT(optBits, 'p') & DBG_TESTOPT_EXT(optBits, 'z'))) {
+        DBG_PrintBuf("spa zoneckgextnum\n\nusage:\nspa zoneckgextnum <-p pool id>"
+            "<-z zone id>\nspa zoneckgextnum <-s switch>\n\nparameter:\n<-p ?>\t\tPool ID\n<-z ?>\t\tZone ID\n<-s ?>\t\t"
+            "LUN creation check switch(open|close|query)\n\n");
         return;
     }
-
     if (RETURN_OK != spaDebugCheckPoolWorkCtrl(poolId))
     {
         return;
@@ -1612,7 +1614,6 @@
         DBG_Print("The zone id is not in any tier of the pool.\n");
         return;
     }
-
     key.poolId = poolId;
     key.type   = MOBJ_ZONE_CKG;
     key.volumeId = GENERATE_VOL_ID_BY_POOL(poolId, SPA_METADATA_VOL_GENTYPE);
@@ -1658,7 +1659,6 @@
                   zoneBitmapTree->extCounter.referFSnonRaid1MetaExtNum);/* fs raid6 meta end */
     }
     UNREFERENCE_PARAM(metaExtentQuota);
-    
     return;
 }
 void spaDebugQueryDgHealth(int32_t argc, char *argv[])
@@ -24466,3 +24466,43 @@
     return;
 }
 
+bool g_lunFsMetaCapCheckSwitch = TRUE;
+
+void setCreationLunCheckSwitch(uint32_t optBits, char *createLunSwitchStr)
+{
+    if (createLunSwitchStr == NULL || DBG_TESTOPT_EXT(optBits, 'p') || DBG_TESTOPT_EXT(optBits, 'z'))
+    {
+        DBG_PrintBuf("spa zoneckgextnum\n\nusage:\nspa zoneckgextnum <-p pool id>"
+            "<-z zone id>\nspa zoneckgextnum <-s switch>"
+            "\n\nparameter:\n<-p ?>\t\tPool ID\n<-z ?>\t\tZone ID\n<-s ?>\t\t"
+            "LUN creation check switch(open|close|query)\n\n");
+        return;
+    }
+
+    if (stricmp("query", createLunSwitchStr) == 0)
+    {
+        DBG_PrintBuf("Now creation lun/fs meta cap check switch: %s \n", g_lunFsMetaCapCheckSwitch ? "open" : "close");
+    }
+    else if (stricmp("open", createLunSwitchStr) == 0)
+    {
+        g_lunFsMetaCapCheckSwitch = TRUE;
+        DBG_PrintBuf("Set creation lun/fs meta cap check switch: open success \n");
+        DBG_LogWarning(NO_LOGID, "Set creation lun/fs meta cap check switch open success.");
+    }
+    else if (stricmp("close", createLunSwitchStr) == 0)
+    {
+        g_lunFsMetaCapCheckSwitch = FALSE;
+        DBG_PrintBuf("Set creation lun/fs meta cap check switch: close success \n");
+        DBG_LogWarning(NO_LOGID, "Set creation lun/fs meta cap check switch close success.");
+    }
+    else
+    {
+        DBG_PrintBuf("spa zoneckgextnum\n\nusage:\nspa zoneckgextnum <-p pool id>"
+            "<-z zone id>\nspa zoneckgextnum <-s switch>"
+            "\n\nparameter:\n<-p ?>\t\tPool ID\n<-z ?>\t\tZone ID\n<-s ?>\t\t"
+            "LUN creation check switch(open|close|query)\n\n");
+    }
+    
+    return;
+}
+
