object_locator_t oloc(cache->mds->mdsmap->get_metadata_pool());
ObjectOperation rd;
rd.tmap_get(&fin->bl, NULL);
- cache->mds->objecter->read(oid, oloc, rd, CEPH_NOSNAP, NULL, 0, fin);
+ cache->mds->objecter->read(oid, oloc, rd, CEPH_NOSNAP, NULL, 0,
+ new C_OnFinisher(fin, &cache->mds->finisher));
}
void CDir::_tmap_fetched(bufferlist& bl, const string& want_dn, int r)
ObjectOperation rd;
rd.omap_get_header(&fin->hdrbl, &fin->ret1);
rd.omap_get_vals("", "", (uint64_t)-1, &fin->omap, &fin->ret2);
- cache->mds->objecter->read(oid, oloc, rd, CEPH_NOSNAP, NULL, 0, fin);
+ cache->mds->objecter->read(oid, oloc, rd, CEPH_NOSNAP, NULL, 0,
+ new C_OnFinisher(fin, &cache->mds->finisher));
}
void CDir::_omap_fetched(bufferlist& hdrbl, map<string, bufferlist>& omap,
map<string, bufferlist> to_set;
C_GatherBuilder gather(g_ceph_context,
- new C_IO_Dir_Committed(this, get_version()));
+ new C_OnFinisher(new C_IO_Dir_Committed(this,
+ get_version()),
+ &cache->mds->finisher));
SnapContext snapc;
object_t oid = get_ondisk_object();
object_t oid = CInode::get_object_name(ino(), frag_t(), ".inode");
object_locator_t oloc(mdcache->mds->mdsmap->get_metadata_pool());
- mdcache->mds->objecter->mutate(oid, oloc, m, snapc, ceph_clock_now(g_ceph_context), 0,
- NULL, new C_IO_Inode_Stored(this, get_version(), fin) );
+ Context *newfin =
+ new C_OnFinisher(new C_IO_Inode_Stored(this, get_version(), fin),
+ &mdcache->mds->finisher);
+ mdcache->mds->objecter->mutate(oid, oloc, m, snapc,
+ ceph_clock_now(g_ceph_context), 0,
+ NULL, newfin);
}
void CInode::_stored(version_t v, Context *fin)
dout(10) << "fetch" << dendl;
C_IO_Inode_Fetched *c = new C_IO_Inode_Fetched(this, fin);
- C_GatherBuilder gather(g_ceph_context, c);
+ C_GatherBuilder gather(g_ceph_context, new C_OnFinisher(c, &mdcache->mds->finisher));
object_t oid = CInode::get_object_name(ino(), frag_t(), "");
object_locator_t oloc(mdcache->mds->mdsmap->get_metadata_pool());
SnapContext snapc;
object_t oid = get_object_name(ino(), frag_t(), "");
object_locator_t oloc(pool);
- Context *fin2 = new C_IO_Inode_StoredBacktrace(this, inode.backtrace_version, fin);
+ Context *fin2 = new C_OnFinisher(
+ new C_IO_Inode_StoredBacktrace(this, inode.backtrace_version, fin),
+ &mdcache->mds->finisher);
if (!state_test(STATE_DIRTYPOOL) || inode.old_pools.empty()) {
mdcache->mds->objecter->mutate(oid, oloc, op, snapc, ceph_clock_now(g_ceph_context),
dout(10) << " old object in pool " << info.pool
<< ", retrying pool " << backtrace.pool << dendl;
info.pool = backtrace.pool;
- C_IO_MDC_OpenInoBacktraceFetched *fin = new C_IO_MDC_OpenInoBacktraceFetched(this, ino);
- fetch_backtrace(ino, info.pool, fin->bl, fin);
+ C_IO_MDC_OpenInoBacktraceFetched *fin =
+ new C_IO_MDC_OpenInoBacktraceFetched(this, ino);
+ fetch_backtrace(ino, info.pool, fin->bl,
+ new C_OnFinisher(fin, &mds->finisher));
return;
}
} else if (err == -ENOENT) {
dout(10) << " no object in pool " << info.pool
<< ", retrying pool " << meta_pool << dendl;
info.pool = meta_pool;
- C_IO_MDC_OpenInoBacktraceFetched *fin = new C_IO_MDC_OpenInoBacktraceFetched(this, ino);
- fetch_backtrace(ino, info.pool, fin->bl, fin);
+ C_IO_MDC_OpenInoBacktraceFetched *fin =
+ new C_IO_MDC_OpenInoBacktraceFetched(this, ino);
+ fetch_backtrace(ino, info.pool, fin->bl,
+ new C_OnFinisher(fin, &mds->finisher));
return;
}
}
info.checking = mds->get_nodeid();
info.checked.clear();
info.checked.insert(mds->get_nodeid());
- C_IO_MDC_OpenInoBacktraceFetched *fin = new C_IO_MDC_OpenInoBacktraceFetched(this, ino);
- fetch_backtrace(ino, info.pool, fin->bl, fin);
+ C_IO_MDC_OpenInoBacktraceFetched *fin =
+ new C_IO_MDC_OpenInoBacktraceFetched(this, ino);
+ fetch_backtrace(ino, info.pool, fin->bl,
+ new C_OnFinisher(fin, &mds->finisher));
} else {
assert(!info.ancestors.empty());
info.checking = mds->get_nodeid();
// dir. on recovery, we'll need to re-eval all strays anyway.
SnapContext nullsnapc;
- C_GatherBuilder gather(g_ceph_context, new C_IO_MDC_PurgeStrayPurged(this, dn));
+ C_GatherBuilder gather(
+ g_ceph_context,
+ new C_OnFinisher(new C_IO_MDC_PurgeStrayPurged(this, dn), &mds->finisher));
if (in->is_dir()) {
object_locator_t oloc(mds->mdsmap->get_metadata_pool());
ufragment &uf = it->second;
// remove old frags
- C_GatherBuilder gather(g_ceph_context, new C_IO_MDC_FragmentFinish(this, basedirfrag, resultfrags));
+ C_GatherBuilder gather(
+ g_ceph_context,
+ new C_OnFinisher(
+ new C_IO_MDC_FragmentFinish(this, basedirfrag, resultfrags),
+ &mds->finisher));
SnapContext nullsnapc;
object_locator_t oloc(mds->mdsmap->get_metadata_pool());
#include "include/types.h"
#include "common/config.h"
+#include "common/Finisher.h"
+
#include "include/assert.h"
mds->objecter->write_full(oid, oloc,
snapc,
bl, ceph_clock_now(g_ceph_context), 0,
- NULL, new C_IO_MT_Save(this, version));
+ NULL,
+ new C_OnFinisher(new C_IO_MT_Save(this, version),
+ &mds->finisher));
}
void MDSTable::save_2(int r, version_t v)
C_IO_MT_Load *c = new C_IO_MT_Load(this, onfinish);
object_t oid = get_object_name();
object_locator_t oloc(mds->mdsmap->get_metadata_pool());
- mds->objecter->read_full(oid, oloc, CEPH_NOSNAP, &c->bl, 0, c);
+ mds->objecter->read_full(oid, oloc, CEPH_NOSNAP, &c->bl, 0,
+ new C_OnFinisher(c, &mds->finisher));
}
void MDSTable::load_2(int r, bufferlist& bl, Context *onfinish)
C_IO_SM_Load *c = new C_IO_SM_Load(this);
object_t oid = get_object_name();
object_locator_t oloc(mds->mdsmap->get_metadata_pool());
- mds->objecter->read_full(oid, oloc, CEPH_NOSNAP, &c->bl, 0, c);
+ mds->objecter->read_full(oid, oloc, CEPH_NOSNAP, &c->bl, 0,
+ new C_OnFinisher(c, &mds->finisher));
}
void SessionMap::_load_finish(int r, bufferlist &bl)
mds->objecter->write_full(oid, oloc,
snapc,
bl, ceph_clock_now(g_ceph_context), 0,
- NULL, new C_IO_SM_Save(this, version));
+ NULL,
+ new C_OnFinisher(new C_IO_SM_Save(this, version),
+ &mds->finisher));
}
void SessionMap::_save_finish(version_t v)