]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: use helper functions to access/modify SnapRealm::open 4723/head
authorYan, Zheng <zyan@redhat.com>
Mon, 1 Jun 2015 03:26:05 +0000 (11:26 +0800)
committerYan, Zheng <zyan@redhat.com>
Mon, 1 Jun 2015 06:09:47 +0000 (14:09 +0800)
Signed-off-by: Yan, Zheng <zyan@redhat.com>
src/mds/CInode.cc
src/mds/MDCache.cc
src/mds/Server.cc
src/mds/SnapRealm.h

index ea390e14dcf0377b365b48c0a317c3f193a01e24..bf1a986e98ce1f906084c7a0797db1534c579d9e 100644 (file)
@@ -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;
index 3a1a1882aac61896497dbd666386bd755aeb9166..d3570432768af15921747ad6eaaca3afdf1b5c33 100644 (file)
@@ -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);
 
index 09eda66fb1c3e9cf42d6aca1dd9a29732a3ee19a..ffda716b84ea1ebda62368e925cc396dda96c7b8 100644 (file)
@@ -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;
   }
index feffea19be3556017c4904cdb3fe590fadb7ea05..92f3de9119dc44ca299491f705b8d9c169c8a4bd 100644 (file)
@@ -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) {