]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: open base inode's snaprealm after decoding snapblob 5466/head
authorYan, Zheng <zyan@redhat.com>
Tue, 4 Aug 2015 11:18:10 +0000 (19:18 +0800)
committerYan, Zheng <zyan@redhat.com>
Tue, 4 Aug 2015 11:28:01 +0000 (19:28 +0800)
base inode has no parent, so can we mark its snaprealm open
immediately. This change makes sure replica mdsdir's snaplream
is opened.

Fixes: #12578
Signed-off-by: Yan, Zheng <zyan@redhat.com>
src/mds/CInode.cc
src/mds/StrayManager.cc

index 6f770a5b2f261b981077d33637fa8adce8f49fa5..96da24d218cd12f4fffe3f1416d1cb59ec5bca21 100644 (file)
@@ -2577,6 +2577,10 @@ void CInode::decode_snap_blob(bufferlist& snapbl)
     open_snaprealm();
     bufferlist::iterator p = snapbl.begin();
     ::decode(snaprealm->srnode, p);
+    if (is_base()) {
+      bool ok = snaprealm->_open_parents(NULL);
+      assert(ok);
+    }
     dout(20) << "decode_snap_blob " << *snaprealm << dendl;
   }
 }
index 4f1155c55f15076e16a898bb6eb5c50b68e4f32d..6cc60b4bf648d5b2688579a917eabf3aaed51d5c 100644 (file)
@@ -551,7 +551,7 @@ bool StrayManager::__eval_stray(CDentry *dn, bool delay)
     // past snaprealm parents imply snapped dentry remote links.
     // only important for directories.  normal file data snaps are handled
     // by the object store.
-    if (in->snaprealm && in->snaprealm->has_past_parents()) {
+    if (in->snaprealm) {
       if (!in->snaprealm->have_past_parents_open() &&
           !in->snaprealm->open_parents(new C_MDC_EvalStray(this, dn))) {
         return false;