From aed1498922843f53e3156df7909642d28a22105b Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Tue, 8 Jul 2014 16:21:34 -0700 Subject: [PATCH] MDS: CInode: add a fetch_backtrace() utility function Expose MDCache::fetch_backtrace and call it from the CInode context. Signed-off-by: Greg Farnum --- src/mds/CInode.cc | 11 +++++++++++ src/mds/CInode.h | 1 + src/mds/MDCache.h | 4 +++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index 175cfc3926ef8..bb7914bb4e569 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 2162820ed2470..f01b5977aef53 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 9f02b3ba31fe2..a5a61311d4e0c 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); -- 2.39.5