]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: update MDLog._replay_thread for locking
authorJohn Spray <john.spray@redhat.com>
Wed, 23 Jul 2014 12:22:17 +0000 (13:22 +0100)
committerJohn Spray <john.spray@redhat.com>
Mon, 25 Aug 2014 00:34:03 +0000 (01:34 +0100)
... no longer use mds_lock as a guard for condition variable
while waiting for journaler contexts.

Signed-off-by: John Spray <john.spray@redhat.com>
src/mds/MDLog.cc
src/mds/MDLog.h

index f7d925e49a081572f5fc3b5af26cc087bbb6e7aa..1eb6096665e31bd03503ad8dc512b511f5d3d2d6 100644 (file)
@@ -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();
index ed9f4edba16a772702a71584f7ddf4cec57f23a4..ac27efc094cc742059c96eab6413436d98673ed4 100644 (file)
@@ -79,8 +79,6 @@ protected:
 
 
   // -- replay --
-  Cond replay_cond;
-
   class ReplayThread : public Thread {
     MDLog *log;
   public: