From ed49d5ef908344b8ab8feb823010b9f76ac19b17 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Sat, 22 Mar 2014 20:26:34 +0800 Subject: [PATCH] mds: journal EFragment::OP_COMMIT before drop locks Dropping locks can dispatch other requests. These request can submit log entry. Signed-off-by: Yan, Zheng --- src/mds/MDCache.cc | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index ad3564da2b2ad..4a4957ba4091a 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -11487,9 +11487,7 @@ class C_MDC_FragmentCommit : public Context { list resultfrags; public: C_MDC_FragmentCommit(MDCache *m, dirfrag_t df, list& 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); } -- 2.39.5