From: Yan, Zheng Date: Fri, 8 Nov 2013 09:45:12 +0000 (+0800) Subject: mds: re-send discover if want_xlocked becomes true X-Git-Tag: v0.75~93^2~28 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=bd561772ba078e98a2aa277848a473097f24086e;p=ceph.git mds: re-send discover if want_xlocked becomes true If want_xlocked becomes true, we can not rely on previously sent discover because it's likely the previous discover is blocked on the xlocked dentry. Signed-off-by: Yan, Zheng --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 18f57910fc5..7c4c982ab7b 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -8350,8 +8350,18 @@ void MDCache::open_ino(inodeno_t ino, int64_t pool, Context* fin, open_ino_info_t& info = opening_inodes[ino]; if (want_replica) { info.want_replica = true; - if (want_xlocked) + if (want_xlocked && !info.want_xlocked) { + if (!info.ancestors.empty()) { + CInode *diri = get_inode(info.ancestors[0].dirino); + if (diri) { + frag_t fg = diri->pick_dirfrag(info.ancestors[0].dname); + CDir *dir = diri->get_dirfrag(fg); + if (dir && !dir->is_auth()) + discover_ino(dir, ino, NULL, true); + } + } info.want_xlocked = true; + } } info.waiters.push_back(fin); } else {