From: Sage Weil Date: Thu, 16 Aug 2012 00:19:22 +0000 (-0700) Subject: osd: explicitly requeue waiting_for_map in on_change() X-Git-Tag: v0.51~12 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=da210bee091705fc488cc7c839c32d46280c1719;p=ceph.git osd: explicitly requeue waiting_for_map in on_change() Since we are requeuing stuff anyway, do it all in the correct order. This fixes a bug where take_waiters() comes along later (at activate_map time) and puts waiting_for_map events at the front of the queue, in front of e.g. waiting_for_missing. This breaks ordering from the client's perspective. The convention should be: whenever you requeue, requeuing everything that logically follows it first. Fixes: #2947 Signed-off-by: Sage Weil Reviewed-by: Samuel Just --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 3e1b0dfbd0ed..3396511d3749 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -5772,6 +5772,10 @@ void ReplicatedPG::on_change() { dout(10) << "on_change" << dendl; + // requeue everything in the reverse order they should be + // reexamined. + requeue_ops(waiting_for_map); + clear_scrub_reserved(); scrub_clear_state();