]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: clean up merge() callchain
authorSage Weil <sage@newdream.net>
Tue, 26 Oct 2010 23:53:54 +0000 (16:53 -0700)
committerSage Weil <sage@newdream.net>
Wed, 27 Oct 2010 02:19:03 +0000 (19:19 -0700)
Signed-off-by: Sage Weil <sage@newdream.net>
src/mds/CDir.cc
src/mds/CDir.h
src/mds/MDCache.cc

index 266a7527e9bc230116d6d31188f7d9427276608a..f0b66744b1f15751d7c4e19af2db0e44d71f951f 100644 (file)
@@ -743,17 +743,14 @@ void CDir::split(int bits, list<CDir*>& subs, list<Context*>& waiters, bool repl
   inode->close_dirfrag(frag); // selft deletion, watch out.
 }
 
-void CDir::merge(int bits, list<Context*>& waiters, bool replay)
+void CDir::merge(list<CDir*>& subs, list<Context*>& waiters, bool replay)
 {
-  dout(10) << "merge by " << bits << " bits" << dendl;
+  dout(10) << "merge " << subs << dendl;
 
-  list<frag_t> frags;
-  frag.split(bits, frags);
-  
-  for (list<frag_t>::iterator p = frags.begin(); p != frags.end(); ++p) {
-    CDir *dir = inode->get_or_open_dirfrag(cache, *p);
-    assert(dir->is_complete());
-    dout(10) << " subfrag " << *p << " " << *dir << dendl;
+  for (list<CDir*>::iterator p = subs.begin(); p != subs.end(); p++) {
+    CDir *dir = *p;
+    dout(10) << " subfrag " << dir->get_frag() << " " << *dir << dendl;
+    assert(!dir->is_auth() || dir->is_complete());
     
     // steal dentries
     while (!dir->items.empty()) 
index a10fc504539de146fa016c8a4aad112a00fb0512..5a2aae7d2d00c7006786bf2329af29b1fb6addd6 100644 (file)
@@ -342,7 +342,7 @@ public:
 
 public:
   void split(int bits, list<CDir*>& subs, list<Context*>& waiters, bool replay);
-  void merge(int bits, list<Context*>& waiters, bool replay);
+  void merge(list<CDir*>& subs, list<Context*>& waiters, bool replay);
 private:
   void steal_dentry(CDentry *dn);  // from another dir.  used by merge/split.
   void purge_stolen(list<Context*>& waiters, bool replay);
index e3dfe2b658649963d3726c67e081a1199f3d0115..80514d6bb4076760847c47fd652df24aaa947c15 100644 (file)
@@ -8511,9 +8511,10 @@ void MDCache::adjust_dir_fragments(CInode *diri,
       }
     } else {
       // merge
+      CDir *f = new CDir(diri, basefrag, this, srcfrags.front()->is_auth());
+      f->merge(srcfrags, waiters, replay);
 
-      // ....
-      assert(0 == "not implemented");
+      assert(0 == "fix subtree map...not implemented");
     }
   }
 }