]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: call on_new_interval on newly split child PG 6849/head
authorSage Weil <sage@redhat.com>
Wed, 2 Dec 2015 19:50:28 +0000 (14:50 -0500)
committerAbhishek Varshney <abhishek.varshney@flipkart.com>
Tue, 8 Dec 2015 08:17:01 +0000 (13:47 +0530)
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 <sage@redhat.com>
(cherry picked from commit fb120d7b2da5715e7f7d1baa65bfa70d2e5d807a)

src/osd/PG.cc

index c13321c7b37abafcf340ce4c686d8c293ed13b0c..d42dd02d800581b2937e1a69003572c436186076 100644 (file)
@@ -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;