]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix replay locking 2448/head
authorYan, Zheng <ukernel@gmail.com>
Wed, 10 Sep 2014 05:44:58 +0000 (13:44 +0800)
committerYan, Zheng <ukernel@gmail.com>
Wed, 10 Sep 2014 08:48:47 +0000 (16:48 +0800)
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 <zyan@redhat.com>
src/mds/MDLog.cc

index 6de3f3e9321683d60a99502e0860902b85e3459e..837a47597b3157943c813d4bda70d5c2bc8dbe76 100644 (file)
@@ -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;