--- ./source/private_module/spc/spc_snapshot/spc_snap_comp_session_mgt.c	2018-02-09 13:47:03.000000000 +0000
+++ ./source/private_module/spc/spc_snapshot/spc_snap_comp_session_mgt.c.hotpatch	2019-07-12 10:53:49.000000000 +0000
@@ -215,8 +215,8 @@
 
     return;
 }
-
-/* ͷsessionInfoڴ, ҳ, sessionIndex, Լժڵ */
+#define DIFF_MASK (0xFFFF)
+#define NEED_RESET_MASK (0xFFFF0000)
 void freeSnapDiffSessionMem(uint64_t sessionId, SNAP_DIFF_SESSION_INFO *sessionInfo)
 {
     uint32_t                sessionIndex = 0;
@@ -226,7 +226,7 @@
     destroyAsyncCondition(&sessionInfo->stopCond);
     destroyAsyncCondition(&sessionInfo->buffInfo.waitCond);
 
-    if (!sessionInfo->isNoDiff)
+    if (!(sessionInfo->isNoDiff & DIFF_MASK))
     {
         FREE_PAGES_AND_SGL(INVALID_VALUE64, INVALID_VALUE64, 
                    sessionInfo->buffInfo.buffSgl, PAGE_USAGE_FS_SPC_TEMP_USE);
@@ -536,13 +536,15 @@
     sessionInfo = res->sessionInfo;
     finishPos   = &(sessionInfo->finishPos);
     inputPos    = &res->inputPos;
-
+    if ((uint32_t)sessionInfo->isNoDiff & NEED_RESET_MASK)
+    {
+        return B_TRUE;
+    }
     /* δʹpos,ֱӴfinishPosʼ */
     if (!res->usePos)
     {
         return B_FALSE;
     }
-
     /* 1inputPosfinishPosϢͬʱ,finishPos
        2ͬʱ,ɨ߳,źȴ,ɨ̻߳
     */
@@ -551,12 +553,10 @@
                  && (inputPos->type   == finishPos->type)  
                  && (inputPos->innerOff == finishPos->innerOff)
                  && (inputPos->freeObjType == finishPos->freeObjType);
-
     if (condition)
     {
         return B_FALSE;
     }
-
     return B_TRUE;
 }
 
@@ -593,8 +593,8 @@
     memcpy(&res->sessionInfo->finishPos, inputPos, sizeof(SNAP_DIFF_POS_S));
 
     /* ϱǽ״̬ */
-    res->sessionInfo->scanStatus = res->sessionInfo->isNoDiff ? SCAN_STATUS_FINISH : SCAN_STATUS_INIT;
-    result = res->sessionInfo->isNoDiff ? RETURN_OK : createSnapDiffScanThread(res->sessionInfo);
+    res->sessionInfo->scanStatus = (res->sessionInfo->isNoDiff & DIFF_MASK) ? SCAN_STATUS_FINISH : SCAN_STATUS_INIT;
+    result = (res->sessionInfo->isNoDiff & DIFF_MASK) ? RETURN_OK : createSnapDiffScanThread(res->sessionInfo);
     if (RETURN_OK != result)
     {
         FS_SNAP_LOG_ERROR(DBG_LOGID_NEW, "Create scan thread failed(%d).", result);
@@ -741,7 +741,7 @@
             if (RETURN_SPACE_ENOSPC != result)
             {
                 FS_SNAP_LOG_ERROR(DBG_LOGID_NEW, "Fill records 2 buf failed(%d).", result);
-
+                res->sessionInfo->isNoDiff |= 0x10000;
                 return result;
             }
         
@@ -1081,7 +1081,7 @@
     spin_unlock(&session->sessionInfo->sessionInfoLock);
 
     /* ûв,ɨ߳ */
-    if (isNoDiff)
+    if (isNoDiff & DIFF_MASK)
     {
         return CONTEXT_CONTINUE;
     }
@@ -2899,12 +2899,12 @@
     sessionInfo->scanContext = NULL;
     sessionInfo->scanStatus  = SCAN_STATUS_INIT;
     sessionInfo->scanRet     = RETURN_OK;
-
     sessionInfo->buffInfo.totalNum = 0;
     sessionInfo->buffInfo.startPos = 0;
     sessionInfo->buffInfo.endPos   = 0;
     sessionInfo->buffInfo.fullWait = B_FALSE;
     sessionInfo->buffInfo.fetchWait= B_FALSE;
+    sessionInfo->isNoDiff          &= DIFF_MASK;
 
     return;
 }
