]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: do not eval subtree root when replay|resolve
authorSage Weil <sage@newdream.net>
Fri, 19 Nov 2010 23:10:54 +0000 (15:10 -0800)
committerSage Weil <sage@newdream.net>
Mon, 22 Nov 2010 17:55:01 +0000 (09:55 -0800)
This is nonsensical.  And can lead to scatter_writebehind, which breaks
horribly.

Signed-off-by: Sage Weil <sage@newdream.net>
src/mds/MDCache.cc

index f944c8724307860741d425a36d35c06badcbf95f..a0d3e30feebf0df2f7226316cfbb0b49e9566f68 100644 (file)
@@ -640,6 +640,9 @@ void MDCache::adjust_subtree_auth(CDir *dir, pair<int,int> auth, bool do_eval)
   dout(7) << "adjust_subtree_auth " << dir->get_dir_auth() << " -> " << auth
          << " on " << *dir << dendl;
 
+  if (mds->is_replay() || mds->is_resolve())
+    do_eval = false;
+
   show_subtrees();
 
   CDir *root;
@@ -740,6 +743,10 @@ void MDCache::try_subtree_merge_at(CDir *dir)
   dout(10) << "try_subtree_merge_at " << *dir << dendl;
   assert(subtrees.count(dir));
 
+  bool do_eval = true;
+  if (mds->is_replay() || mds->is_resolve())
+    do_eval = false;
+
   // merge with parent?
   CDir *parent = dir;  
   if (!dir->inode->is_base())
@@ -775,7 +782,8 @@ void MDCache::try_subtree_merge_at(CDir *dir)
       }
     }
 
-    eval_subtree_root(dir->get_inode());
+    if (do_eval)
+      eval_subtree_root(dir->get_inode());
 
     // journal inode? 
     //  (this is a large hammer to ensure that dirfragtree updates will