diff options
author | Greg Farnum <greg@inktank.com> | 2013-09-30 16:20:26 -0700 |
---|---|---|
committer | Greg Farnum <greg@inktank.com> | 2013-10-01 13:29:23 -0700 |
commit | 6ed8b7ae56d88c586e3d359e649b41b892d3cee1 (patch) | |
tree | 734bfe11956f0a8becaec054638122053785d38c | |
parent | 5307703bf18fea717f9daadba1c1653a5a30b716 (diff) | |
download | ceph-6ed8b7ae56d88c586e3d359e649b41b892d3cee1.tar.gz |
ReplicatedPG: copy: add an ObjectContextRef to CopyOp
Use that instead of the OpContext::obc in copy codepaths.
Signed-off-by: Greg Farnum <greg@inktank.com>
-rw-r--r-- | src/osd/ReplicatedPG.cc | 15 | ||||
-rw-r--r-- | src/osd/ReplicatedPG.h | 5 |
2 files changed, 10 insertions, 10 deletions
diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index feee6de920f..aba0a1067c0 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -4395,7 +4395,7 @@ int ReplicatedPG::start_copy(OpContext *ctx, cancel_copy(cop); } - CopyOpRef cop(new CopyOp(ctx, src, oloc, version)); + CopyOpRef cop(new CopyOp(ctx, ctx->obc, src, oloc, version)); copy_ops[dest] = cop; ctx->copy_op = cop; ++ctx->obc->copyfrom_readside; @@ -4449,8 +4449,7 @@ void ReplicatedPG::process_copy_chunk(hobject_t oid, tid_t tid, int r) << " tid " << cop->objecter_tid << dendl; return; } - OpContext *ctx = cop->ctx; - ObjectContextRef obc = ctx->obc; + ObjectContextRef obc = cop->obc; cop->objecter_tid = 0; if (r >= 0) { @@ -4484,11 +4483,11 @@ void ReplicatedPG::process_copy_chunk(hobject_t oid, tid_t tid, int r) } dout(20) << __func__ << " complete; committing" << dendl; - execute_ctx(ctx); + execute_ctx(cop->ctx); copy_ops.erase(obc->obs.oi.soid); --obc->copyfrom_readside; - ctx->copy_op.reset(); + cop->ctx->copy_op.reset(); kick_object_context_blocked(obc); } @@ -4571,11 +4570,11 @@ void ReplicatedPG::cancel_copy(CopyOpRef cop) osd->objecter->op_cancel(cop->objecter_tid); } - copy_ops.erase(ctx->obc->obs.oi.soid); - --ctx->obc->copyfrom_readside; + copy_ops.erase(cop->obc->obs.oi.soid); + --cop->obc->copyfrom_readside; ctx->copy_op.reset(); - kick_object_context_blocked(ctx->obc); + kick_object_context_blocked(cop->obc); delete ctx; } diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h index f6898d80f13..c968ad3ea2f 100644 --- a/src/osd/ReplicatedPG.h +++ b/src/osd/ReplicatedPG.h @@ -96,6 +96,7 @@ public: struct CopyOp { OpContext *ctx; + ObjectContextRef obc; hobject_t src; object_locator_t oloc; version_t version; @@ -114,8 +115,8 @@ public: hobject_t temp_oid; object_copy_cursor_t temp_cursor; - CopyOp(OpContext *c, hobject_t s, object_locator_t l, version_t v) - : ctx(c), src(s), oloc(l), version(v), + CopyOp(OpContext *c, ObjectContextRef _obc, hobject_t s, object_locator_t l, version_t v) + : ctx(c), obc(_obc), src(s), oloc(l), version(v), objecter_tid(0), size(0), rval(-1) |