From: Yan, Zheng Date: Fri, 28 Jul 2017 08:27:26 +0000 (+0800) Subject: mds: fix race in "open inode by inode number" X-Git-Tag: ses5-milestone10~3^2~19^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7c665d5db799512bb3116f844f5d00ab92d23fff;p=ceph.git mds: fix race in "open inode by inode number" If we have found inode in peer mds' cache, but failed to discover the inode. The path to inode must have changed. we should check peer again, instead of fetching backtrace, because inode's backtrace may haven't been stored. Fixes: http://tracker.ceph.com/issues/20806 Signed-off-by: "Yan, Zheng" --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 1b27f8a15f65..c5289840ef69 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -8616,7 +8616,13 @@ void MDCache::do_open_ino(inodeno_t ino, open_ino_info_t& info, int err) info.last_err = err; } - if (info.check_peers) { + if (info.check_peers || info.discover) { + if (info.discover) { + // got backtrace from peer, but failed to find inode. re-check peers + info.discover = false; + info.ancestors.clear(); + info.checked.clear(); + } info.check_peers = false; info.checking = MDS_RANK_NONE; do_open_ino_peer(ino, info);