]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
MDS: CInode: add a fetch_backtrace() utility function
authorGreg Farnum <greg@inktank.com>
Tue, 8 Jul 2014 23:21:34 +0000 (16:21 -0700)
committerGreg Farnum <gfarnum@redhat.com>
Fri, 7 Nov 2014 19:48:42 +0000 (11:48 -0800)
Expose MDCache::fetch_backtrace and call it from the CInode context.

Signed-off-by: Greg Farnum <greg@inktank.com>
src/mds/CInode.cc
src/mds/CInode.h
src/mds/MDCache.h

index 175cfc3926ef861ebbdf2cbb7a220bf2ca279cb1..bb7914bb4e569fe871d17e8bd396085ce447ee53 100644 (file)
@@ -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)) {
index 2162820ed247030363c32da80e9a86599b52bb55..f01b5977aef53c3236f546eec807e0e19a71f2a6 100644 (file)
@@ -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); }
index 9f02b3ba31fe2444ee412c42942d09cfb36a644e..a5a61311d4e0caced2587a716f090e72a0b05ad4 100644 (file)
@@ -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);