]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix up open_remote_ino_2 to open remote stray, root if necessary
authorSage Weil <sage@newdream.net>
Tue, 27 May 2008 02:51:27 +0000 (19:51 -0700)
committerSage Weil <sage@newdream.net>
Tue, 27 May 2008 02:51:27 +0000 (19:51 -0700)
src/mds/Locker.cc
src/mds/MDCache.cc

index 1b9289149705aab5e38df0eb07e48f5921adce4a..6693336598477add4bf8960e18a99148570e581d 100644 (file)
@@ -2016,7 +2016,7 @@ void Locker::scatter_wrlock_finish(ScatterLock *lock, Mutation *mut)
 
 bool Locker::scatter_xlock_start(ScatterLock *lock, MDRequest *mut)
 {
-  dout(7) << "file_xlock_start on " << *lock << " on " << *lock->get_parent() << dendl;
+  dout(7) << "scatter_xlock_start on " << *lock << " on " << *lock->get_parent() << dendl;
 
   assert(lock->get_parent()->is_auth());  // remote scatter xlock not implemented
 
index 380453c647ac7e98c02087569b262d73e60dff43..272cde55aa6677ba46f96d5df7e9ba71bd24a79a 100644 (file)
@@ -4467,7 +4467,19 @@ void MDCache::open_remote_ino_2(inodeno_t ino,
     i--;
     if (!i) {
       in = get_inode(anchortrace[i].dirfrag.ino);
-      assert(in);  // actually, we may need to open the root or a foreign stray inode, here.
+      if (!in) {
+       dout(0) << "open_remote_ino_2 don't have inode " << anchortrace[i].dirfrag.ino << dendl;
+       if (anchortrace[i].dirfrag.ino == MDS_INO_ROOT) {
+         open_root(onfinish);
+         return;
+       }
+       if (MDS_INO_IS_STRAY(anchortrace[i].dirfrag.ino)) {
+         int mds = anchortrace[i].dirfrag.ino % MAX_MDS;
+         open_foreign_stray(mds, onfinish);
+         return;
+       }
+       assert(in);  // hrm!
+      }
       break;
     }
   }