Superfluous MMDSOpenInoReply can causes MDCache::handle_open_ino_reply()
to call MDCache::do_open_ino() in improper state.
Fixes: http://tracker.ceph.com/issues/18754
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
inodeno_t ino = m->ino;
mds_rank_t from = mds_rank_t(m->get_source().num());
- if (opening_inodes.count(ino)) {
- open_ino_info_t& info = opening_inodes[ino];
-
- if (info.checking == from)
- info.checking = MDS_RANK_NONE;
+ auto it = opening_inodes.find(ino);
+ if (it != opening_inodes.end() && it->second.checking == from) {
+ open_ino_info_t& info = it->second;
+ info.checking = MDS_RANK_NONE;
info.checked.insert(from);
CInode *in = get_inode(ino);