]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: flush journal on truncate if readers/writers are waiting
authorSage Weil <sage@newdream.net>
Wed, 4 Mar 2009 17:11:32 +0000 (09:11 -0800)
committerSage Weil <sage@newdream.net>
Wed, 4 Mar 2009 19:02:07 +0000 (11:02 -0800)
src/mds/MDCache.cc
src/mds/Server.cc

index ae0939937e4996171d1dfbcb52ab3b2263164061..11b33616f16b61d7e29f6c67aa4975fcb7514cb3 100644 (file)
@@ -4162,6 +4162,10 @@ void MDCache::truncate_inode_finish(CInode *in, LogSegment *ls)
 
   journal_dirty_inode(mut, &le->metablob, in);
   mds->mdlog->submit_entry(le, new C_MDC_TruncateLogged(this, in, mut));
+
+  // flush immediately if there are readers/writers waiting
+  if (in->get_caps_wanted() & (CEPH_CAP_FILE_RD|CEPH_CAP_FILE_WR))
+    mds->mdlog->flush();
 }
 
 void MDCache::truncate_inode_logged(CInode *in, Mutation *mut)
index a1a5dedd7ff2a43dd13d72747c1f6c9e9a7e7739..45ed25c3973cb95070e03406e6360129f71b3000 100644 (file)
@@ -4899,6 +4899,10 @@ void Server::handle_client_truncate(MDRequest *mdr)
   mdcache->journal_dirty_inode(mdr, &le->metablob, cur);
   
   journal_and_reply(mdr, cur, 0, le, new C_MDS_truncate_logged(mds, mdr, cur, smaller));
+
+  // flush immediately if there are readers/writers waiting
+  if (cur->get_caps_wanted() & (CEPH_CAP_FILE_RD|CEPH_CAP_FILE_WR))
+    mds->mdlog->flush();
 }