summaryrefslogtreecommitdiff
path: root/src/mds/MDCache.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mds/MDCache.h')
-rw-r--r--src/mds/MDCache.h10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/mds/MDCache.h b/src/mds/MDCache.h
index b9e7cfa823f..f5c83d5b18d 100644
--- a/src/mds/MDCache.h
+++ b/src/mds/MDCache.h
@@ -946,9 +946,11 @@ private:
struct ufragment {
int bits;
bool committed;
+ LogSegment *ls;
+ list<Context*> waiters;
list<frag_t> old_frags;
bufferlist rollback;
- ufragment() : bits(0), committed(false) {}
+ ufragment() : bits(0), committed(false), ls(NULL) {}
};
map<dirfrag_t, ufragment> uncommitted_fragments;
@@ -993,10 +995,14 @@ private:
void handle_fragment_notify(MMDSFragmentNotify *m);
void add_uncommitted_fragment(dirfrag_t basedirfrag, int bits, list<frag_t>& old_frag,
- bufferlist *rollback=NULL);
+ LogSegment *ls, bufferlist *rollback=NULL);
void finish_uncommitted_fragment(dirfrag_t basedirfrag, int op);
void rollback_uncommitted_fragment(dirfrag_t basedirfrag, list<frag_t>& old_frags);
public:
+ void wait_for_uncommitted_fragment(dirfrag_t dirfrag, Context *c) {
+ assert(uncommitted_fragments.count(dirfrag));
+ uncommitted_fragments[dirfrag].waiters.push_back(c);
+ }
void split_dir(CDir *dir, int byn);
void merge_dir(CInode *diri, frag_t fg);
void rollback_uncommitted_fragments();