--- ./source/private_module/pal/pal_adapt/pal_fsadapt.c	2018-04-10 08:10:16.000000000 +0000
+++ ./source/private_module/pal/pal_adapt/pal_fsadapt.c.hotpatch	2019-09-23 14:57:57.000000000 +0000
@@ -686,7 +686,7 @@
 
     return CONTEXT_PENDING;
 }
-
+bool isAccessSnapshot(FS_ADAPT_RES_S *res);
 /**************************************************************************
      :  л֪ͨ˫
  :  context contextָ
@@ -700,9 +700,9 @@
 {
     bool need = FALSE;
     bool isSnapFsID = FALSE;
+    bool isSnapshotDir = FALSE;
     uint32_t fsId;
     FS_ADAPT_RES_S *res = (FS_ADAPT_RES_S*)getData(context);
-
     if (FS_INNER_EIO == res->result && OPERATION_TYPE_LOOKUP_PATH == res->adaptReq.type)
     {
         PAL_LOG_DEBUG(DBG_LOGID_NEW, "HM_handle: lookupPath no need handle snapshot(FS:%llu) filesystem.",
@@ -710,7 +710,6 @@
         
         return CONTEXT_CONTINUE; 
     }
-
     /*ļϵͳ˫л*/
     isSnapFsID = isSnapshotFsId(res->adaptReq.fsId);
     if (unlikely(isSnapFsID))
@@ -720,7 +719,6 @@
                      res->adaptReq.fsId);
         return CONTEXT_CONTINUE; 
     }
-    
     need = needHmSwitch(res);
     if (!need)/*벻Ҫ˫*/
     {
@@ -728,18 +726,20 @@
                      res->adaptReq.fsId, res->adaptReq.type, res->result);
         return CONTEXT_CONTINUE;   
     }
-
+    isSnapshotDir = isAccessSnapshot(res);
+    if (isSnapshotDir)/*.snapshotĿ¼²صĴ*/
+    {
+        DBG_LogInfo(DBG_LOGID_NEW,"HM_handle: HM no need handle filesystem(ID:%llu) in .snapshot,operation(type:%d) error code(%d).",
+                     res->adaptReq.fsId, res->adaptReq.type, res->result);
+        return CONTEXT_CONTINUE;   
+    }
     PAL_LOG_INFO(DBG_LOGID_NEW,"HM_handle: there's IOerror(%d) in filesystem(ID:%llu, operation:%d),"
         "and notification for HM processing.",res->result, res->adaptReq.fsId, res->adaptReq.type); 
-
     VOLS_COUNTER_START_INC(VOLS_COUNTER_NOTIFY_HM_SWTICH, VOLS_DEBUG_PAL_IO);
-        
     /*˫л*/
     fsId = getFsIdByFsSrvId(res->adaptReq.fsId);
     pfnHandleIoErr(fsId,res->result,handleIoErrorCbDone,context);
-    
     return CONTEXT_PENDING;
-    
 }
 
 
@@ -951,5 +951,87 @@
     return RETURN_OK;
 }
 
+/**************************************************************************
+    :  жfsIdǿջļϵͳ
+:  ID
+:  
+ֵ  :  ǿշTRUEļϵͳFALSE
+    :
+**************************************************************************/
+bool isAccessSnapshot(FS_ADAPT_RES_S *res)
+{
+    OPERATION_TYPE_E opType;
+    bool     isSnapshot  = FALSE;
+    bool     isSnapshot1 = FALSE;
+    uint64_t fid   = 0;
+    uint64_t fid1  = 0;
+
+    opType = res->adaptReq.type;
+
+    if (OPERATION_TYPE_SET_XATTR == opType)
+    {
+        ADAPT_SET_XATTR_S *req = (ADAPT_SET_XATTR_S *)res->adaptReq.req;
+        fid  = req->fid;     
+    }
+
+    if (OPERATION_TYPE_SET_ATTR == opType)
+    {
+        ADAPT_SET_ATTR_S *req = (ADAPT_SET_ATTR_S *)res->adaptReq.req;
+        fid  = req->fid;     
+    }
+    
+    if (OPERATION_TYPE_CREATE == opType)
+    {
+        ADAPT_CREATE_S *req = (ADAPT_CREATE_S *)res->adaptReq.req;
+        fid  = req->parentfid;    
+    }
+
+    if (OPERATION_TYPE_REMOVE == opType)
+    {
+        ADAPT_REMOVE_S *req = (ADAPT_REMOVE_S *)res->adaptReq.req;
+        fid  = req->dirId;   
+    }
+    
+    if (OPERATION_TYPE_RENAME == opType)
+    {
+        ADAPT_RENAME_S *req = (ADAPT_RENAME_S *)res->adaptReq.req;
+        fid  = req->srcDirId;
+        fid1 = req->destDirId;   
+    }
+
+    if (OPERATION_TYPE_WRITE == opType)
+    {
+        ADAPT_WRITE_S *req = (ADAPT_WRITE_S *)res->adaptReq.req;
+        fid  = req->fid;    
+    }
+
+    if (OPERATION_TYPE_HARD_LINK == opType)
+    {
+        ADAPT_HARD_LINK_S *req = (ADAPT_HARD_LINK_S *)res->adaptReq.req;
+        fid    = req->fid;
+        fid1   = req->destDirId;
+    }
+
+    if (OPERATION_TYPE_SYMLINK == opType)
+    {
+        ADAPT_SYMLINK_S *req = (ADAPT_SYMLINK_S *)res->adaptReq.req;
+        fid    = req->destDirId;
+    }
+
+    if (OPERATION_TYPE_WRITE_ZERO_COPY == opType)
+    {
+        ADAPT_WRITE_ZERO_COPY_S *req = (ADAPT_WRITE_ZERO_COPY_S *)res->adaptReq.req;
+        fid  = req->fid;  
+    }
+
+    decodeSpecialFid(res->adaptReq.fsId, NULL, &fid);
+    isSnapshot = (fid == PAL_DOT_SNAPSHOT_CSDIR)? TRUE : FALSE;
+    
+    decodeSpecialFid(res->adaptReq.fsId, NULL, &fid1);
+    isSnapshot1 = (fid1 == PAL_DOT_SNAPSHOT_CSDIR)? TRUE : FALSE;
+    
+    isSnapshot = isSnapshot | isSnapshot1;
 
+    return isSnapshot;
+}
 
