]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix C_MDC_TruncateFinish locking
authorJohn Spray <john.spray@redhat.com>
Wed, 23 Jul 2014 16:40:12 +0000 (17:40 +0100)
committerJohn Spray <john.spray@redhat.com>
Mon, 25 Aug 2014 00:34:11 +0000 (01:34 +0100)
This one needed to take mds_lock, and be invoked
from a finisher.

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

index 7b8e7490059a062adcbef3a6d00ea5ad5d6da166..68c77b3c3e3bc1f444ceeb3773879eb6334985ac 100644 (file)
@@ -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 {