From: Liam R. Howlett Date: Tue, 29 Sep 2020 14:37:37 +0000 (-0400) Subject: maple_tree: Fix mas_parent_gap() propigation upwards X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=2d02c3c076ac8634521854d2bab3bd3d9181c3d2;p=users%2Fjedix%2Flinux-maple.git maple_tree: Fix mas_parent_gap() propigation upwards Signed-off-by: Liam R. Howlett --- diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 88a783be04d77..45fc3874782f5 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -1186,6 +1186,7 @@ static inline void mas_parent_gap(struct ma_state *mas, unsigned char slot, struct maple_enode *penode; unsigned long *ppivots, *pgaps, *gpgaps = NULL; enum maple_type pmt, gpmt; + unsigned char pslot = slot; pnode = mte_parent(mas->node); pmt = gpmt = mas_parent_enum(mas, mas->node); @@ -1197,7 +1198,8 @@ ascend: gpnode = mte_parent(penode); gpmt = mas_parent_enum(mas, penode); gpgaps = ma_gaps(gpnode, gpmt); - old_max_gap = gpgaps[slot]; + pslot = mte_parent_slot(penode); + old_max_gap = gpgaps[pslot]; } pgaps[slot] = new; if (mte_is_root(penode)) @@ -1212,7 +1214,7 @@ ascend: pnode = gpnode; pmt = gpmt; pgaps = gpgaps; - slot = mte_parent_slot(penode); + slot = pslot; penode = mt_mk_node(pnode, pmt); goto ascend; } @@ -1239,9 +1241,8 @@ static inline void mas_update_gap(struct ma_state *mas) p_gap = ma_gaps(mte_parent(mas->node), mas_parent_enum(mas, mas->node))[pslot]; - if (p_gap != max_gap) { + if (p_gap != max_gap) mas_parent_gap(mas, pslot, max_gap); - } } /*