From: Yan, Zheng Date: Wed, 10 Sep 2014 05:44:58 +0000 (+0800) Subject: mds: fix replay locking X-Git-Tag: v0.86~102^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F2448%2Fhead;p=ceph.git mds: fix replay locking When replaying EImportFinish/EFragment event, the replay thread may call MDS::queue_waiters. MDS::queue_waiters() requires its caller to hold the mds_lock. Otherwise assert(waiter_mutex == __null || waiter_mutex->is_locked()) in Cond::Signal() will be tiggered. Signed-off-by: Yan, Zheng --- diff --git a/src/mds/MDLog.cc b/src/mds/MDLog.cc index 6de3f3e93216..837a47597b31 100644 --- a/src/mds/MDLog.cc +++ b/src/mds/MDLog.cc @@ -1045,7 +1045,9 @@ void MDLog::_replay_thread() le->_segment->end = journaler->get_read_pos(); num_events++; + mds->mds_lock.Lock(); le->replay(mds); + mds->mds_lock.Unlock(); } delete le;