From: Greg Farnum Date: Tue, 8 Jul 2014 23:21:34 +0000 (-0700) Subject: MDS: CInode: add a fetch_backtrace() utility function X-Git-Tag: v0.89~50^2~28 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=aed1498922843f53e3156df7909642d28a22105b;p=ceph.git MDS: CInode: add a fetch_backtrace() utility function Expose MDCache::fetch_backtrace and call it from the CInode context. Signed-off-by: Greg Farnum --- diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index 175cfc3926e..bb7914bb4e5 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -1113,6 +1113,17 @@ void CInode::_stored_backtrace(version_t v, Context *fin) fin->complete(0); } +void CInode::fetch_backtrace(Context *fin, bufferlist *backtrace) +{ + int64_t pool; + if (is_dir()) + pool = mdcache->mds->mdsmap->get_metadata_pool(); + else + pool = inode.layout.fl_pg_pool; + + mdcache->fetch_backtrace(inode.ino, pool, *backtrace, fin); +} + void CInode::_mark_dirty_parent(LogSegment *ls, bool dirty_pool) { if (!state_test(STATE_DIRTYPARENT)) { diff --git a/src/mds/CInode.h b/src/mds/CInode.h index 2162820ed24..f01b5977aef 100644 --- a/src/mds/CInode.h +++ b/src/mds/CInode.h @@ -547,6 +547,7 @@ public: void build_backtrace(int64_t pool, inode_backtrace_t& bt); void store_backtrace(MDSInternalContextBase *fin, int op_prio=-1); void _stored_backtrace(version_t v, Context *fin); + void fetch_backtrace(Context *fin, bufferlist *backtrace); void _mark_dirty_parent(LogSegment *ls, bool dirty_pool=false); void clear_dirty_parent(); bool is_dirty_parent() { return state_test(STATE_DIRTYPARENT); } diff --git a/src/mds/MDCache.h b/src/mds/MDCache.h index 9f02b3ba31f..a5a61311d4e 100644 --- a/src/mds/MDCache.h +++ b/src/mds/MDCache.h @@ -864,9 +864,11 @@ public: dn->get_dir()->get_inode()->is_stray()) eval_stray(dn, delay); } + + void fetch_backtrace(inodeno_t ino, int64_t pool, bufferlist& bl, Context *fin); + protected: void scan_stray_dir(dirfrag_t next=dirfrag_t()); - void fetch_backtrace(inodeno_t ino, int64_t pool, bufferlist& bl, Context *fin); void purge_stray(CDentry *dn); void _purge_stray_purged(CDentry *dn, int r=0); void _purge_stray_logged(CDentry *dn, version_t pdv, LogSegment *ls);