--- ./source/private_module/transaction2/spacetx_diagnose.c	2018-04-21 09:08:09.000000000 +0000
+++ ./source/private_module/transaction2/spacetx_diagnose.c.hotpatch	2018-08-29 03:26:22.000000000 +0000
@@ -33,7 +33,7 @@
 
 /* ģID */
 MODULE_ID(PID_SPACE_TX);
-
+extern uint32_t g_stxCreateRatioScale;
 #define TLV_FIRST_RECORD_ID (0) 
 /*ʾĬϢ*/
 STATIC SPACETX_HANDLE_SHOW_S g_SpaceTxQuiesceArray[SPACETX_HANDLE_MAX_NUM];
@@ -647,8 +647,8 @@
     DBG_Print("                   autoAdjustSwitch   : 0: close or 1:open, default 0\n");
     DBG_Print("                   adjustCapacity     : [0, 10240](GB) default, 300GB\n");
     DBG_Print("                   stopAdjustCapacity : [0, 10240](GB) default, 500GB\n");
-
-    DBG_Print("-example: spacetx set 5 bgrFreeSize 1024\n");
+    DBG_Print("                   createRatioScale   : [50, 500](%%) default, 120\n");
+    DBG_Print("-example: spacetx setbgr 5 bgrFreeSize 1024\n");
     return;
 }
 
@@ -1774,12 +1774,12 @@
     DBG_Print("  isAdjustBgrSwitchOn : %d \n", isAdjustBgrSwitchOn);
     DBG_Print("  bgrSpaceSwitch      : %d \n", bgrSpaceSwitch);
     DBG_Print("  createRatio         : %u \n", createRatio);
+    DBG_Print("  createRatioScale    : %u \n", g_stxCreateRatioScale);
     DBG_Print("  txWriteSize(sector) : %u \n", txWriteSize);
     DBG_Print("  txFreeSize(sector)  : %u \n", txFreeSize);
     DBG_Print("  freeMaxSize(sector) : %d \n", freeMaxSize);
     DBG_Print("  adjustCapacity(GB)  : %d \n", adjustCapacity);
     DBG_Print("  stopAdjustCapacity(GB): %d \n", stopAdjustCapacity);
-    
 
     if (SPACETX_SYNC_OK != ret)     
     {
@@ -2911,7 +2911,7 @@
     {
         *agrNum = MIN(*agrNum, 10240); /* 10240GB */
         ret = RETURN_OK;
-    }
+    } else if (0 == strcmp(argv[SPACETX_DIAG_THREE_PARA_NUM], "createRatioScale")){*agrNum = MIN(*agrNum, 500);*agrNum = MAX(*agrNum, 50);ret = RETURN_OK;}
     else 
     {
         ret = RETURN_ERROR;
@@ -3841,7 +3841,6 @@
     }
 
     instanceId = spaceTxAdaptedSpaceId(instanceId);
-    
     txInstance = getSpaceTxInstanceById(instanceId);
     if (unlikely(NULL == txInstance))
     {
@@ -3859,13 +3858,11 @@
     }  
 
     spin_lock(&txInstance->stateLock);
-
     /*öʱʱֵΧ*/
     if (0 == strcmp(argv[SPACETX_DIAG_THREE_PARA_NUM], "bgrFreeSize"))
     {
         txInstance->freeMaxSize = (uint32_t)agrNum << 11;  /* MB->sector */
         spin_unlock(&txInstance->stateLock);
-        
         DBG_Print("set bgrFreeSize to %u(sector).\n", txInstance->freeMaxSize);
         return;
     }
@@ -3874,7 +3871,6 @@
     {
         txInstance->isAdjustBgrSwitchOn = (1 == agrNum) ? B_TRUE : B_FALSE;
         spin_unlock(&txInstance->stateLock);
-        
         DBG_Print("set autoAdjustSwitch to %s.\n", txInstance->isAdjustBgrSwitchOn ? "TRUE" : "FALSE");
         return;
     }
@@ -3907,12 +3903,16 @@
         
         DBG_Print("set stopAdjustCapacity to %uGB.\n", (uint32_t)txInstance->stopAdjustCapacity);
         return;
+    } 
+    else if (0 == strcmp(argv[SPACETX_DIAG_THREE_PARA_NUM], "createRatioScale"))
+    {
+        g_stxCreateRatioScale = (uint32_t)agrNum;
+        spin_unlock(&txInstance->stateLock);
+        DBG_Print("set createRatioScale to %llu.\n", agrNum);
+        return;
     }
-    
     spin_unlock(&txInstance->stateLock);
-    DBG_Print("param error.\n");
-
-    
+    DBG_Print("param error.\n");    
     return;
 }
 
--- ./source/private_module/transaction2/spacetx_manage.c	2018-04-21 09:08:09.000000000 +0000
+++ ./source/private_module/transaction2/spacetx_manage.c.hotpatch	2018-08-29 03:26:22.000000000 +0000
@@ -30,7 +30,7 @@
 
 /* ģ */
 MODULE_NAME("SpaceTx_Manage");
-
+uint32_t g_stxCreateRatioScale = 120;
 /*******************************************************************
 *   : incrSpaceTxRefCnt
 *     : һü
@@ -857,30 +857,30 @@
 
 uint32_t getInstanceFreeMaxSize(TX_INSTANCE_S *txInstance)
 {
-    uint32_t freeDataMaxInL1 = 0;
+    uint64_t freeDataMaxInL1 = 0;
     int32_t txHandlNum;
 
-    /* شҿռ䲻ʱ̬ɾ */
     if (unlikely(txInstance->isAdjustBgrSwitchOn && txInstance->bgrSpaceSwitch))
     {
         txHandlNum = atomic_read(&txInstance->txQuiesceCnt) + atomic_read(&txInstance->txWaitCnt);
         if (txHandlNum < 2)  /* ҵУ̬ */
         {
-            freeDataMaxInL1 = txInstance->freeMaxSize; /*  Ĭ1G */
+            freeDataMaxInL1 = (uint64_t)txInstance->freeMaxSize; /*  Ĭ1G */
         }
         else
         {
-            freeDataMaxInL1 = txInstance->stInstSize.txDataSize + txInstance->stInstSize.txBonusSize + txInstance->stInstSize.txApoSize;
-            freeDataMaxInL1 = freeDataMaxInL1 * txInstance->createRatio / 100; /* ͷŵ÷ͷŵĿռƽ */
-            freeDataMaxInL1 = MAX(freeDataMaxInL1, 65536); /* ֹ̨ɾ32M(65536sector) */
+            freeDataMaxInL1 = (uint64_t)txInstance->stInstSize.txDataSize + txInstance->stInstSize.txBonusSize + txInstance->stInstSize.txApoSize;
+            SPACETX_INNER_LOG_DEBUG(SPACETX_MGR, TRANS_LOGID, "SpaceTx: instance %llu free data max in L1 before adjust is %llu.", txInstance->instanceID, freeDataMaxInL1);
+			freeDataMaxInL1 = (freeDataMaxInL1 * txInstance->createRatio * g_stxCreateRatioScale) / 10000; /* ͷŵ÷ͷŵĿռƽ */
+            freeDataMaxInL1 = MAX(freeDataMaxInL1, (uint64_t)txInstance->freeMaxSize);
+            SPACETX_INNER_LOG_DEBUG(SPACETX_MGR, TRANS_LOGID, "SpaceTx: instance %llu free data max in L1 after adjust is %llu, createRatio %u, createRatioScale %u.", txInstance->instanceID, freeDataMaxInL1, txInstance->createRatio, g_stxCreateRatioScale);
         }
     }
     else
     {
-        freeDataMaxInL1 = txInstance->freeMaxSize;     /* Ĭ1G */
+        freeDataMaxInL1 = (uint64_t)txInstance->freeMaxSize;     /* Ĭ1G */
     }
-
-    return freeDataMaxInL1;
+    return (uint32_t)freeDataMaxInL1;
 }
 
 /*****************************************************************************
