]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ReplicatedPG: take clone write lock as well in make_writeable
authorSamuel Just <sam.just@inktank.com>
Tue, 11 Feb 2014 02:34:52 +0000 (18:34 -0800)
committerSamuel Just <sam.just@inktank.com>
Mon, 17 Feb 2014 22:24:56 +0000 (14:24 -0800)
Otherwise, we might start backfilling the clone before the op is
complete.

Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/ReplicatedPG.cc
src/osd/ReplicatedPG.h

index 31e31c72dbc7f3c4d47577e44481d77f6142f768..3c2372676be4584813b105d20afaa3f3b084e29e 100644 (file)
@@ -4622,6 +4622,8 @@ void ReplicatedPG::make_writeable(OpContext *ctx)
       if (pool.info.require_rollback())
        ctx->clone_obc->attr_cache = ctx->obc->attr_cache;
       snap_oi = &ctx->clone_obc->obs.oi;
+      bool got = ctx->clone_obc->get_write(ctx->op);
+      assert(got);
     } else {
       snap_oi = &static_snap_oi;
     }
index 0564395fbab7c4595e9f7d1edec8f4ed338d71f0..474f020bf6b41eb40eeeea6e242445d66ef92dd1 100644 (file)
@@ -629,10 +629,13 @@ protected:
   void release_op_ctx_locks(OpContext *ctx) {
     list<OpRequestRef> to_req;
     bool requeue_recovery = false;
+    bool requeue_recovery_clone = false;
     switch (ctx->lock_to_release) {
     case OpContext::W_LOCK:
       ctx->obc->put_write(&to_req, &requeue_recovery);
-      if (requeue_recovery)
+      if (ctx->clone_obc)
+       ctx->clone_obc->put_write(&to_req, &requeue_recovery_clone);
+      if (requeue_recovery || requeue_recovery_clone)
        osd->recovery_wq.queue(this);
       break;
     case OpContext::R_LOCK: