]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: purge stale snap data in CInode with snaprealm
authorYan, Zheng <zyan@redhat.com>
Tue, 10 Mar 2015 03:58:31 +0000 (11:58 +0800)
committerYan, Zheng <zyan@redhat.com>
Wed, 18 Mar 2015 06:12:34 +0000 (14:12 +0800)
Signed-off-by: Yan, Zheng <zyan@redhat.com>
src/mds/CDir.cc
src/mds/CInode.cc
src/mds/Server.cc

index 58ef6ba18d28ae4ac94dd0f11020bab6059c470c..4471c5740b468805cbf278908d8349a70a1a812c 100644 (file)
@@ -2032,8 +2032,14 @@ void CDir::_encode_dentry(CDentry *dn, bufferlist& bl,
     // marker, name, inode, [symlink string]
     bl.append('I');         // inode
 
-    if (in->is_multiversion() && snaps && !in->snaprealm)
-      in->purge_stale_snap_data(*snaps);
+    if (in->is_multiversion()) {
+      if (!in->snaprealm) {
+       if (snaps)
+         in->purge_stale_snap_data(*snaps);
+      } else if (in->snaprealm->have_past_parents_open()) {
+       in->purge_stale_snap_data(in->snaprealm->get_snaps());
+      }
+    }
 
     bufferlist snap_blob;
     in->encode_snap_blob(snap_blob);
index 6819875dc797e9d71d24f3aa7c9409c7819eabf4..46eefad1353199af25595928d796c7cb9e73b89e 100644 (file)
@@ -946,6 +946,9 @@ void CInode::store(MDSInternalContextBase *fin)
   dout(10) << "store " << get_version() << dendl;
   assert(is_base());
 
+  if (snaprealm)
+    purge_stale_snap_data(snaprealm->get_snaps());
+
   // encode
   bufferlist bl;
   string magic = CEPH_FS_ONDISK_MAGIC;
index 5fb40a561b38b7be41c7197b6af99b92aff58876..d69a935b988dad6d261bc03c379c24091c647413 100644 (file)
@@ -7901,6 +7901,10 @@ void Server::_rmsnap_finish(MDRequestRef& mdr, CInode *diri, snapid_t snapid)
   // yay
   mdr->in[0] = diri;
   respond_to_request(mdr, 0);
+
+  // purge snapshot data
+  if (diri->snaprealm->have_past_parents_open())
+    diri->purge_stale_snap_data(diri->snaprealm->get_snaps());
 }