]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix Server::C_MarkEvent locking
authorJohn Spray <john.spray@redhat.com>
Wed, 23 Jul 2014 16:36:55 +0000 (17:36 +0100)
committerJohn Spray <john.spray@redhat.com>
Mon, 25 Aug 2014 00:34:08 +0000 (01:34 +0100)
... it should acquire mds_lock.

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

index 48d06919007e186dcffe753dab73a4566eb2c58e..21bde20d1c0acadb935fbd80907d49e7614b18df 100644 (file)
@@ -825,16 +825,18 @@ void Server::journal_and_reply(MDRequestRef& mdr, CInode *in, CDentry *dn, LogEv
 
 class C_MarkEvent : public Context
 {
+  MDS *mds;
   Context *true_finisher;
   MDRequestRef mdr;
   string event_str;
 public:
-  C_MarkEvent(Context *f, MDRequestRef& _mdr,
+  C_MarkEvent(MDS *mds_, Context *f, MDRequestRef& _mdr,
               const char *evt) :
-                true_finisher(f), mdr(_mdr), event_str("journal_committed: ") {
+                mds(mds_), true_finisher(f), mdr(_mdr), event_str("journal_committed: ") {
     event_str += evt;
   }
   virtual void finish(int r) {
+    Mutex::Locker l(mds->mds_lock);
     mdr->mark_event(event_str);
     true_finisher->complete(r);
   }
@@ -847,7 +849,7 @@ void Server::submit_mdlog_entry(LogEvent *le, Context *fin, MDRequestRef& mdr,
     string event_str("submit entry: ");
     event_str += event;
     mdr->mark_event(event_str);
-    mdlog->submit_entry(le, new C_MarkEvent(fin, mdr, event));
+    mdlog->submit_entry(le, new C_MarkEvent(mds, fin, mdr, event));
   } else
     mdlog->submit_entry(le, fin);
 }