From: Greg Farnum Date: Mon, 30 Sep 2013 23:20:26 +0000 (-0700) Subject: ReplicatedPG: copy: add an ObjectContextRef to CopyOp X-Git-Tag: v0.71~22^2~12 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6ed8b7ae56d88c586e3d359e649b41b892d3cee1;p=ceph.git ReplicatedPG: copy: add an ObjectContextRef to CopyOp Use that instead of the OpContext::obc in copy codepaths. Signed-off-by: Greg Farnum --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index feee6de920f5..aba0a1067c00 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 f6898d80f13e..c968ad3ea2fc 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)