]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: journal EFragment::OP_COMMIT before drop locks
authorYan, Zheng <zheng.z.yan@intel.com>
Sat, 22 Mar 2014 12:26:34 +0000 (20:26 +0800)
committerYan, Zheng <zheng.z.yan@intel.com>
Fri, 28 Mar 2014 18:08:13 +0000 (02:08 +0800)
Dropping locks can dispatch other requests. These request can submit
log entry.

Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
src/mds/MDCache.cc

index ad3564da2b2ad44d8d3f282af42f3d49602e6802..4a4957ba4091adbc3951a007840d2f5254b342e1 100644 (file)
@@ -11487,9 +11487,7 @@ class C_MDC_FragmentCommit : public Context {
   list<CDir*> resultfrags;
 public:
   C_MDC_FragmentCommit(MDCache *m, dirfrag_t df, list<CDir*>& l) :
-    mdcache(m), basedirfrag(df) {
-    resultfrags.swap(l);
-  }
+    mdcache(m), basedirfrag(df), resultfrags(l) {}
   virtual void finish(int r) {
     mdcache->_fragment_committed(basedirfrag, resultfrags);
   }
@@ -11693,7 +11691,12 @@ void MDCache::_fragment_stored(MDRequest *mdr)
 
     mds->send_message_mds(notify, p->first);
   }
-  
+
+  // journal commit
+  EFragment *le = new EFragment(mds->mdlog, EFragment::OP_COMMIT, basedirfrag, info.bits);
+  mds->mdlog->start_submit_entry(le, new C_MDC_FragmentCommit(this, basedirfrag,
+                                                             info.resultfrags));
+
   mds->locker->drop_locks(mdr);
 
   // unfreeze resulting frags
@@ -11716,11 +11719,6 @@ void MDCache::_fragment_stored(MDRequest *mdr)
     dir->unfreeze_dir();
   }
 
-  // journal commit
-  EFragment *le = new EFragment(mds->mdlog, EFragment::OP_COMMIT, basedirfrag, info.bits);
-  mds->mdlog->start_submit_entry(le, new C_MDC_FragmentCommit(this, basedirfrag,
-                                                             info.resultfrags));
-
   fragments.erase(it);
   request_finish(mdr);
 }