From: John Spray Date: Wed, 23 Jul 2014 16:40:12 +0000 (+0100) Subject: mds: fix C_MDC_TruncateFinish locking X-Git-Tag: v0.86~213^2~45 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=29533f3ddef0be86cf3f887908694fae57ad438e;p=ceph.git mds: fix C_MDC_TruncateFinish locking This one needed to take mds_lock, and be invoked from a finisher. Signed-off-by: John Spray --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 7b8e7490059a..68c77b3c3e3b 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -5941,6 +5941,7 @@ struct C_MDC_TruncateFinish : public Context { mdc(c), in(i), ls(l) {} void finish(int r) { assert(r == 0 || r == -ENOENT); + Mutex::Locker l(mdc->mds->mds_lock); mdc->truncate_inode_finish(in, ls); } }; @@ -5973,7 +5974,7 @@ void MDCache::_truncate_inode(CInode *in, LogSegment *ls) dout(10) << "_truncate_inode snapc " << snapc << " on " << *in << dendl; mds->filer->truncate(in->inode.ino, &in->inode.layout, *snapc, pi->truncate_size, pi->truncate_from-pi->truncate_size, pi->truncate_seq, utime_t(), 0, - 0, new C_MDC_TruncateFinish(this, in, ls)); + 0, new C_OnFinisher(new C_MDC_TruncateFinish(this, in, ls), &mds->finisher)); } struct C_MDC_TruncateLogged : public Context {