From 17b2c5b5a607ddad762ca9f62daa9b8a4668440b Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Mon, 1 Jun 2015 11:26:05 +0800 Subject: [PATCH] mds: use helper functions to access/modify SnapRealm::open Signed-off-by: Yan, Zheng --- src/mds/CInode.cc | 2 +- src/mds/MDCache.cc | 7 ++++--- src/mds/Server.cc | 2 +- src/mds/SnapRealm.h | 2 ++ 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index ea390e14dcf03..bf1a986e98ce1 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -444,7 +444,7 @@ void CInode::pop_projected_snaprealm(sr_t *next_snaprealm) snaprealm->srnode.past_parents.size()) { invalidate_cached_snaps = true; // re-open past parents - snaprealm->open = false; + snaprealm->_close_parents(); dout(10) << " realm " << *snaprealm << " past_parents " << snaprealm->srnode.past_parents << " -> " << next_snaprealm->past_parents << dendl; diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 3a1a1882aac61..d3570432768af 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -7628,7 +7628,7 @@ int MDCache::path_traverse(MDRequestRef& mdr, Message *req, MDSInternalContextBa return -ESTALE; // make sure snaprealm are open... - if (mdr && cur->snaprealm && !cur->snaprealm->open && + if (mdr && cur->snaprealm && !cur->snaprealm->is_open() && !cur->snaprealm->open_parents(_get_waiter(mdr, req, fin))) { return 1; } @@ -7781,7 +7781,7 @@ int MDCache::path_traverse(MDRequestRef& mdr, Message *req, MDSInternalContextBa cur = in; // make sure snaprealm are open... - if (mdr && cur->snaprealm && !cur->snaprealm->open && + if (mdr && cur->snaprealm && !cur->snaprealm->is_open() && !cur->snaprealm->open_parents(_get_waiter(mdr, req, fin))) { return 1; } @@ -9118,9 +9118,10 @@ void MDCache::_snaprealm_create_finish(MDRequestRef& mdr, MutationRef& mut, CIno ::decode(seq, p); in->open_snaprealm(); - in->snaprealm->open = true; in->snaprealm->srnode.seq = seq; in->snaprealm->srnode.created = seq; + bool ok = in->snaprealm->_open_parents(NULL); + assert(ok); do_realm_invalidate_and_update_notify(in, CEPH_SNAP_OP_SPLIT); diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 09eda66fb1c3e..ffda716b84ea1 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -2687,7 +2687,7 @@ void Server::handle_client_lookup_ino(MDRequestRef& mdr, return; } - if (mdr && in->snaprealm && + if (mdr && in->snaprealm && !in->snaprealm->is_open() && !in->snaprealm->open_parents(new C_MDS_RetryRequest(mdcache, mdr))) { return; } diff --git a/src/mds/SnapRealm.h b/src/mds/SnapRealm.h index feffea19be355..92f3de9119dc4 100644 --- a/src/mds/SnapRealm.h +++ b/src/mds/SnapRealm.h @@ -66,6 +66,8 @@ struct SnapRealm { return false; } + bool is_open() { return open; } + void _close_parents() { open = false; } bool _open_parents(MDSInternalContextBase *retryorfinish, snapid_t first=1, snapid_t last=CEPH_NOSNAP); void _remove_missing_parent(snapid_t snapid, inodeno_t parent, int err); bool open_parents(MDSInternalContextBase *retryorfinish) { -- 2.39.5