From: Greg Farnum Date: Tue, 27 Jan 2015 23:44:57 +0000 (-0800) Subject: mds: CDir: Implement scrub_dentries_scrubbing() X-Git-Tag: v10.0.1~51^2~19 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=fc6bd3379f121db49ada8e0afe813314355b744d;p=ceph.git mds: CDir: Implement scrub_dentries_scrubbing() Signed-off-by: Greg Farnum --- diff --git a/src/mds/CDir.cc b/src/mds/CDir.cc index a3cfdf6ace2f..930ecb43820e 100644 --- a/src/mds/CDir.cc +++ b/src/mds/CDir.cc @@ -2996,6 +2996,28 @@ int CDir::scrub_dentry_next(MDSInternalContext *cb, CDentry **dnout) return rval; } +void CDir::scrub_dentries_scrubbing(list *out_dentries) +{ + dout(20) << __func__ << dendl; + assert(scrub_infop && scrub_infop->directory_scrubbing); + + for (set::iterator i = + scrub_infop->directories_scrubbing.begin(); + i != scrub_infop->directories_scrubbing.end(); + ++i) { + CDentry *d = lookup(i->name, i->snapid); + assert(d); + out_dentries->push_back(d); + } + for (set::iterator i = scrub_infop->others_scrubbing.begin(); + i != scrub_infop->others_scrubbing.end(); + ++i) { + CDentry *d = lookup(i->name, i->snapid); + assert(d); + out_dentries->push_back(d); + } +} + void CDir::scrub_dentry_finished(CDentry *dn) { dout(20) << __func__ << " on dn " << *dn << dendl; diff --git a/src/mds/CDir.h b/src/mds/CDir.h index c014fa467ea5..6b578892b7f7 100644 --- a/src/mds/CDir.h +++ b/src/mds/CDir.h @@ -286,6 +286,12 @@ public: * @returns a value as described above */ int scrub_dentry_next(MDSInternalContext *cb, CDentry **dnout); + /** + * Get the currently scrubbing dentries. When returned, the passed-in + * list will be filled with all CDentry * which have been returned + * from scrub_dentry_next() but not sent back via scrub_dentry_finished(). + */ + void scrub_dentries_scrubbing(list *out_dentries); /** * Report to the CDir that a CDentry has been scrubbed. Call this * for every CDentry returned from scrub_dentry_next().