]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix CInode::pop_projected_snaprealm()
authorYan, Zheng <zyan@redhat.com>
Tue, 19 May 2015 07:28:09 +0000 (15:28 +0800)
committerYan, Zheng <zyan@redhat.com>
Mon, 1 Jun 2015 06:05:44 +0000 (14:05 +0800)
CInode::pop_projected_snaprealm() was called after calling
CDentry::pop_projected_linkage(). So get_parent_inode()->find_snaprealm()
is not past parent snaprealm. The fix is set snaprealm->open to 'false'
and let SnapRealm::_open_parents() open the new past parent.

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

index 0a4cfc627bbd5dfb0b7ffd63dd85e9fd54da6392..ea390e14dcf0377b365b48c0a317c3f193a01e24 100644 (file)
@@ -443,20 +443,11 @@ void CInode::pop_projected_snaprealm(sr_t *next_snaprealm)
   } else if (next_snaprealm->past_parents.size() !=
             snaprealm->srnode.past_parents.size()) {
     invalidate_cached_snaps = true;
+    // re-open past parents
+    snaprealm->open = false;
 
-    // update parent pointer
-    assert(snaprealm->open);
-    assert(snaprealm->parent);   // had a parent before
-    SnapRealm *new_parent = get_parent_inode()->find_snaprealm();
-    assert(new_parent);
-    CInode *parenti = new_parent->inode;
-    assert(parenti);
-    assert(parenti->snaprealm);
-    snaprealm->parent = new_parent;
-    snaprealm->add_open_past_parent(new_parent);
     dout(10) << " realm " << *snaprealm << " past_parents " << snaprealm->srnode.past_parents
             << " -> " << next_snaprealm->past_parents << dendl;
-    dout(10) << " pinning new parent " << *parenti << dendl;
   }
   snaprealm->srnode = *next_snaprealm;
   delete next_snaprealm;