From: Yan, Zheng Date: Mon, 1 Jun 2015 03:26:05 +0000 (+0800) Subject: mds: use helper functions to access/modify SnapRealm::open X-Git-Tag: v9.0.2~40^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=17b2c5b5a607ddad762ca9f62daa9b8a4668440b;p=ceph.git mds: use helper functions to access/modify SnapRealm::open Signed-off-by: Yan, Zheng --- diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index ea390e14dcf0..bf1a986e98ce 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 3a1a1882aac6..d3570432768a 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 09eda66fb1c3..ffda716b84ea 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 feffea19be35..92f3de9119dc 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) {