--- ./source/private_module/spc/spc_snapshot/spc_snap_diagnose.c	2018-02-09 13:47:03.000000000 +0000
+++ ./source/private_module/spc/spc_snapshot/spc_snap_diagnose.c.hotpatch	2018-08-29 03:26:22.000000000 +0000
@@ -119,7 +119,7 @@
 STATIC void showDeadlistObj(int32_t argc, char *argv[]);
 STATIC void showBpInBpo(int32_t argc, char *argv[]);
 STATIC void helpForShowResMemCount(void);
-
+void showFsSnapReclaimConfig(void);
 #define FS_SNAP_DEADLIST_KV_BUF_LEN (FS_SNAPSHOT_OBJECT_BLOCK_SIZE * 9) /* deadlistbufӡ2048deadlist kv*/
 /* setִк */
 STATIC void setSpcSnapDbgCmd(int32_t argc, char *argv[]);
@@ -132,7 +132,7 @@
 STATIC void setTsmSessionFreeTimeDia(int32_t argc, char *argv[]);
 STATIC void showTsmSessionFreeTime(int32_t argc, char *argv[]);
 STATIC void showAllTsmSession(int32_t argc, char *argv[]);
-
+void setFsSnapReclaimConfig(char *argv[]);
 int32_t snapDiagHextoInt(char *string, uint64_t *res)
 {
     uint32_t i = 0;
@@ -520,10 +520,10 @@
 
 STATIC void helpSetTsmConcurrency(void)
 {
-    DBG_Print("-usage   : fssnap set tsmConcurrency <maxConcurrency> \n");
+    DBG_Print("-usage1  : fssnap set tsmConcurrency <maxConcurrency> \n");
+    DBG_Print("-usage2  : fssnap set tsmConcurrency <type> <value> \n           type: busyCnt idleCnt busyTime idleTime \n");
     DBG_Print("-example : fssnap set tsmConcurrency 6 \n");
     DBG_Print("           The maxConcurrency must in [1, 8] \n");
-
     return;
 }
 
@@ -4498,7 +4498,7 @@
 
     maxConcurrency = showMaxConcurrency();
     DBG_Print("The current max concurrency is (%u).\n", maxConcurrency);
-
+    showFsSnapReclaimConfig();
     return;    
 }
 
@@ -4507,31 +4507,31 @@
     int32_t                 result         = RETURN_OK;
     uint32_t                maxConcurrency = 0;
     uint64_t                tmp            = 0ULL;
-
-    if (SPC_SNAP_DIAG_CMD_FOURTH_PARA != argc)
+    if ((SPC_SNAP_DIAG_CMD_FOURTH_PARA != argc) && (SPC_SNAP_DIAG_CMD_FIFTH_PARA != argc))
     {
         helpSetTsmConcurrency();
-
-        return;
-    }
-
-    result = snapDiagStrToInt(argv[SPC_SNAP_DIAG_CMD_THIRD_PARA], &tmp);
-    if (RETURN_OK != result)
-    {
-        DBG_Print("Input maxConcurrency(%s) is invalid.\n", argv[SPC_SNAP_DIAG_CMD_THIRD_PARA]);
         return;
     }
-
-    maxConcurrency = (uint32_t)tmp;
-    if ((0 == maxConcurrency) || (ONE_SESSION_MAX_CONCURRENCY < maxConcurrency))
+    if (SPC_SNAP_DIAG_CMD_FOURTH_PARA == argc)
     {
-        DBG_Print("The max valid concurrency must lt (%u) and  gt (0).\n", ONE_SESSION_MAX_CONCURRENCY);
+        result = snapDiagStrToInt(argv[SPC_SNAP_DIAG_CMD_THIRD_PARA], &tmp);
+        if (RETURN_OK != result)
+        {
+            DBG_Print("Input maxConcurrency(%s) is invalid.\n", argv[SPC_SNAP_DIAG_CMD_THIRD_PARA]);
+            return;
+        }
+        maxConcurrency = (uint32_t)tmp;
+        if ((0 == maxConcurrency) || (ONE_SESSION_MAX_CONCURRENCY < maxConcurrency))
+        {
+            DBG_Print("The max valid concurrency must lt (%u) and  gt (0).\n", ONE_SESSION_MAX_CONCURRENCY);
+            return;
+        }
+        (void)setMaxConcurrency(maxConcurrency);
+        DBG_Print("Set tsm sessioon concurrency(%llu) success.\n", tmp);
         return;
     }
 
-    (void)setMaxConcurrency(maxConcurrency);
-    DBG_Print("Set tsm sessioon concurrency(%llu) success.\n", tmp);
-    
+    setFsSnapReclaimConfig(argv);
     return;
 }
 
@@ -5873,4 +5873,92 @@
     return B_TRUE;
 }
 
+void setFsSnapReclaimConfig(char *argv[])
+{
+    int32_t             result         = RETURN_OK;
+    uint64_t            tmp            = 0ULL;
+    uint32_t            *tmpBusyCnt    = NULL;
+    uint32_t            *tmpIdleCnt    = NULL;
+    uint64_t            *tmpBusyTime   = NULL;
+    uint64_t            *tmpIdleTime   = NULL;
+     
+    result = snapDiagStrToInt(argv[SPC_SNAP_DIAG_CMD_FOURTH_PARA], &tmp);
+    if (RETURN_OK != result)
+    {
+        DBG_Print("ERROR: Input value(%s) is invalid.\n", argv[SPC_SNAP_DIAG_CMD_FOURTH_PARA]);
+        return;
+    }
+
+    tmpIdleCnt  = getReclaimSnapSpaceMaxBpNumIdle();
+    tmpBusyCnt  = getReclaimSnapSpaceMaxBpNumBusy();
+    tmpIdleTime = getReclaimSnapSpaceMaxMsIdle();
+    tmpBusyTime = getReclaimSnapSpaceMaxMsBusy();
+
+    if (0 == strcmp(argv[SPC_SNAP_DIAG_CMD_THIRD_PARA], "busyCnt"))
+    {
+        if (tmp < 10000 || tmp > *tmpIdleCnt)
+        {
+            DBG_Print("ERROR: The reclaim busyCnt must be in [10000, idleCnt %u].\n", *tmpIdleCnt);
+            return;
+        }
+
+        *tmpBusyCnt = (uint32_t)tmp;
+    }
+    else if (0 == strcmp(argv[SPC_SNAP_DIAG_CMD_THIRD_PARA], "idleCnt"))
+    {
+        if (tmp < *tmpBusyCnt || tmp > 80000)
+        {
+            DBG_Print("ERROR: The reclaim idleCnt must be in [busyCnt %u, 80000].\n", *tmpBusyCnt);
+            return;
+        }
+
+        *tmpIdleCnt = (uint32_t)tmp;
+    }
+    else if (0 == strcmp(argv[SPC_SNAP_DIAG_CMD_THIRD_PARA], "busyTime"))
+    {
+        if (tmp < 100 || tmp > *tmpIdleTime)
+        {
+            DBG_Print("ERROR: The reclaim busyTime must be in [100, idleTime %llu].\n", *tmpIdleTime);
+            return;
+        }
+
+        *tmpBusyTime = tmp;
+    }
+    else if (0 == strcmp(argv[SPC_SNAP_DIAG_CMD_THIRD_PARA], "idleTime"))
+    {
+        if (tmp < *tmpBusyTime || tmp > 1000)
+        {
+            DBG_Print("ERROR: The reclaim idleTime must be in [busyTime %llu, 1000].\n", *tmpBusyTime);
+            return;
+        }
+        
+        *tmpIdleTime = tmp;
+    }
+    else
+    {
+        DBG_Print("ERROR: The type is invalid.\n");
+        return;
+    }
+
+    DBG_LogInfo(DBG_LOGID_NEW, "Set fs snap reclaim config success, type(%s), value(%llu).", argv[SPC_SNAP_DIAG_CMD_THIRD_PARA], tmp);
+
+    DBG_Print("Set fs snap reclaim config success.\n");
+
+    return;
+}
+
+void showFsSnapReclaimConfig(void)
+{
+    uint32_t        *tmpBusyCnt    = getReclaimSnapSpaceMaxBpNumBusy();
+    uint32_t        *tmpIdleCnt    = getReclaimSnapSpaceMaxBpNumIdle();
+    uint64_t        *tmpBusyTime   = getReclaimSnapSpaceMaxMsBusy();
+    uint64_t        *tmpIdleTime   = getReclaimSnapSpaceMaxMsIdle();
+
+    DBG_Print("Snap reclaim busyCnt  : %u.\n",   *tmpBusyCnt);
+    DBG_Print("Snap reclaim idleCnt  : %u.\n",   *tmpIdleCnt);
+    DBG_Print("Snap reclaim busyTime : %llu.\n", *tmpBusyTime);
+    DBG_Print("Snap reclaim idleTime : %llu.\n", *tmpIdleTime);
+
+    return;
+}
 
