From 29533f3ddef0be86cf3f887908694fae57ad438e Mon Sep 17 00:00:00 2001 From: John Spray Date: Wed, 23 Jul 2014 17:40:12 +0100 Subject: [PATCH] mds: fix C_MDC_TruncateFinish locking This one needed to take mds_lock, and be invoked from a finisher. Signed-off-by: John Spray --- src/mds/MDCache.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 7b8e7490059..68c77b3c3e3 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 { -- 2.47.3