From: John Spray Date: Thu, 20 Nov 2014 14:27:27 +0000 (+0000) Subject: mds: fix MDLog I/O callback without finisher X-Git-Tag: v0.90~29^2~2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=2ec67733ce10e5f89ac3ed4d88601a141163bb7b;p=ceph.git mds: fix MDLog I/O callback without finisher This could deadlock if another caller was waiting on a write_head callback while holding mds_lock. Signed-off-by: John Spray --- diff --git a/src/mds/MDLog.cc b/src/mds/MDLog.cc index 0beb6d68f2069..836db4730d8de 100644 --- a/src/mds/MDLog.cc +++ b/src/mds/MDLog.cc @@ -101,9 +101,9 @@ class C_MDL_WriteError : public MDSIOContextBase { void MDLog::write_head(MDSInternalContextBase *c) { - MDSIOContext *fin = NULL; + C_OnFinisher *fin = NULL; if (c != NULL) { - fin = new C_IO_Wrapper(mds, c); + fin = new C_OnFinisher(new C_IO_Wrapper(mds, c), &(mds->finisher)); } journaler->write_head(fin); }