From e01d426850817f8daae2c4d319409947af0dcbd2 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 26 May 2008 19:51:27 -0700 Subject: [PATCH] mds: fix up open_remote_ino_2 to open remote stray, root if necessary --- src/mds/Locker.cc | 2 +- src/mds/MDCache.cc | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index 1b9289149705a..6693336598477 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -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 diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 380453c647ac7..272cde55aa667 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -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; } } -- 2.39.5