From: Sage Weil Date: Fri, 14 Mar 2014 05:02:01 +0000 (-0700) Subject: osd/ReplicatedPG: release op locks on on commit+applied X-Git-Tag: v0.78~20^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=87c911cede50ffadcbb5cfd553df8d436a9975d1;p=ceph.git osd/ReplicatedPG: release op locks on on commit+applied We were releasing the op locks when we applied the update but (potentially) before we committed it. This means that another client can read object state that is not yet durable. Fixes: #7709 Signed-off-by: Sage Weil --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 46d32e910dac..33bea32a72e5 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -6310,8 +6310,6 @@ void ReplicatedPG::eval_repop(RepGather *repop) // applied? if (repop->all_applied) { - release_op_ctx_locks(repop->ctx); - // send dup acks, in order if (waiting_for_ack.count(repop->v)) { assert(waiting_for_ack.begin()->first == repop->v); @@ -6358,6 +6356,8 @@ void ReplicatedPG::eval_repop(RepGather *repop) if (repop->all_applied && repop->all_committed) { repop->rep_done = true; + release_op_ctx_locks(repop->ctx); + calc_min_last_complete_ondisk(); // kick snap_trimmer if necessary