From: Yan, Zheng Date: Sun, 8 Dec 2013 00:01:54 +0000 (+0800) Subject: mds: fix bug in MDCache::open_ino_finish X-Git-Tag: v0.75~93^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5fdcc568c60eebc37cb137060ed7324f4d54aa3a;p=ceph.git mds: fix bug in MDCache::open_ino_finish It's wrong to erase open_ino_info_t after finishing contexts, because MDCache::open_ino() can be called again when finishing contexts. Signed-off-by: Yan, Zheng --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 2747ca4c0697..a7d181b02cf0 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -8293,8 +8293,10 @@ void MDCache::open_ino_finish(inodeno_t ino, open_ino_info_t& info, int ret) { dout(10) << "open_ino_finish ino " << ino << " ret " << ret << dendl; - finish_contexts(g_ceph_context, info.waiters, ret); + list waiters; + waiters.swap(info.waiters); opening_inodes.erase(ino); + finish_contexts(g_ceph_context, waiters, ret); } void MDCache::do_open_ino(inodeno_t ino, open_ino_info_t& info, int err)