From 0e69527fc1e1a683d1eec9a225f7116b17e7b236 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Tue, 4 Aug 2015 19:18:10 +0800 Subject: [PATCH] mds: open base inode's snaprealm after decoding snapblob 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 --- src/mds/CInode.cc | 4 ++++ src/mds/StrayManager.cc | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index 6f770a5b2f26..96da24d218cd 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -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; } } diff --git a/src/mds/StrayManager.cc b/src/mds/StrayManager.cc index 4f1155c55f15..6cc60b4bf648 100644 --- a/src/mds/StrayManager.cc +++ b/src/mds/StrayManager.cc @@ -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; -- 2.47.3