--- ./source/private_module/quota/quota_obj.c	2018-02-09 13:47:03.000000000 +0000
+++ ./source/private_module/quota/quota_obj.c.hotpatch	2018-08-30 13:43:38.000000000 +0000
@@ -874,7 +874,7 @@
                              quotaType, priority, maxHangTime, cbFunc, cbCtx);
     return;
 }
-
+void subAsyncQuotaUsedCntForPatch(IN QUOTA_OBJ_S *obj);
 /**************************************************************************
      : 黹cache dirty quota(бquota blocked recovery)
  : QUOTA_OBJ_S     *quotaObj      : quota ָ
@@ -998,8 +998,8 @@
                 return;
             }
         }
-
         subAsyncQuotaUsedCnt(quotaObj, quotaCnt);
+        subAsyncQuotaUsedCntForPatch(quotaObj);
     }
 
     if ( atomic_read(&(quotaObj->waitingCnt)) > 0)
@@ -1504,8 +1504,8 @@
     else
     {
         subAsyncQuotaUsedCnt(quotaObj, quotaCnt);
+        subAsyncQuotaUsedCntForPatch(quotaObj);
     }
-
     return;
 }
 
@@ -3792,3 +3792,22 @@
     return RETURN_OK;
 }
 
+atomic_t g_repairQuotaMutex = ATOMIC_INIT(0);
+void subAsyncQuotaUsedCntForPatch(IN QUOTA_OBJ_S *obj)	 	 
+{	 	 
+    int32_t tmpUsedCnt = 0;	 
+
+    tmpUsedCnt = atomic_read(&obj->usedCnt);
+    
+    if (tmpUsedCnt < 0)	 	 
+    {	 	
+        if (1 == atomic_inc_return(&g_repairQuotaMutex))
+        {
+            atomic_add(0 - tmpUsedCnt, &obj->usedCnt);	
+            atomic_add(tmpUsedCnt, &obj->remainCnt);
+        }
+        atomic_dec(&g_repairQuotaMutex);
+    }	 	 
+
+    return;
+}
