From: John Spray Date: Wed, 23 Jul 2014 16:36:55 +0000 (+0100) Subject: mds: fix Server::C_MarkEvent locking X-Git-Tag: v0.86~213^2~46 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=68d149767d3bddde5ab28b027a0804aa776b317a;p=ceph.git mds: fix Server::C_MarkEvent locking ... it should acquire mds_lock. Signed-off-by: John Spray --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 48d06919007e..21bde20d1c0a 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -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); }