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);
}
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
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);
}