From: John Spray Date: Wed, 23 Jul 2014 12:22:17 +0000 (+0100) Subject: mds: update MDLog._replay_thread for locking X-Git-Tag: v0.86~213^2~52 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=619ea1fd77ddc8e9ffaa9b41e6a2ea73793f8986;p=ceph.git mds: update MDLog._replay_thread for locking ... no longer use mds_lock as a guard for condition variable while waiting for journaler contexts. Signed-off-by: John Spray --- diff --git a/src/mds/MDLog.cc b/src/mds/MDLog.cc index f7d925e49a08..1eb6096665e3 100644 --- a/src/mds/MDLog.cc +++ b/src/mds/MDLog.cc @@ -22,6 +22,7 @@ #include "common/entity_name.h" #include "common/perf_counters.h" +#include "common/Cond.h" #include "events/ESubtreeMap.h" @@ -673,15 +674,6 @@ void MDLog::replay(Context *c) replay_thread.detach(); } -class C_MDL_Replay : public Context { - MDLog *mdlog; -public: - C_MDL_Replay(MDLog *l) : mdlog(l) {} - void finish(int r) { - mdlog->replay_cond.Signal(); - } -}; - /** * Resolve the JournalPointer object to a journal file, and @@ -959,8 +951,9 @@ void MDLog::_replay_thread() while (!journaler->is_readable() && journaler->get_read_pos() < journaler->get_write_pos() && !journaler->get_error()) { - journaler->wait_for_readable(new C_MDL_Replay(this)); - replay_cond.Wait(mds->mds_lock); + C_SaferCond readable_waiter; + journaler->wait_for_readable(&readable_waiter); + readable_waiter.wait(); } if (journaler->get_error()) { r = journaler->get_error(); diff --git a/src/mds/MDLog.h b/src/mds/MDLog.h index ed9f4edba16a..ac27efc094cc 100644 --- a/src/mds/MDLog.h +++ b/src/mds/MDLog.h @@ -79,8 +79,6 @@ protected: // -- replay -- - Cond replay_cond; - class ReplayThread : public Thread { MDLog *log; public: