From: Sage Weil Date: Wed, 2 Dec 2015 19:50:28 +0000 (-0500) Subject: osd: call on_new_interval on newly split child PG X-Git-Tag: v10.0.1~6^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F6778%2Fhead;p=ceph.git osd: call on_new_interval on newly split child PG We must call on_new_interval() on any interval change *and* on the creation of the PG. Currently we call it from PG::init() and PG::start_peering_interval(). However, PG::split_into() did not do so for the child PG, which meant that the new child feature bits were not properly initialized and the bitwise/nibblewise debug bit was not correctly set. That, in turn, could lead to various misbehaviors, the most obvious of which is scrub errors due to the sort order mismatch. Fixes: #13962 Signed-off-by: Sage Weil --- diff --git a/src/osd/PG.cc b/src/osd/PG.cc index a580c2dc6b2..24145f49fdf 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -2273,6 +2273,8 @@ void PG::split_into(pg_t child_pgid, PG *child, unsigned split_bits) split_ops(child, split_bits); _split_into(child_pgid, child, split_bits); + child->on_new_interval(); + child->dirty_info = true; child->dirty_big_info = true; dirty_info = true;