From 2d02c3c076ac8634521854d2bab3bd3d9181c3d2 Mon Sep 17 00:00:00 2001 From: "Liam R. Howlett" Date: Tue, 29 Sep 2020 10:37:37 -0400 Subject: [PATCH] maple_tree: Fix mas_parent_gap() propigation upwards Signed-off-by: Liam R. Howlett --- lib/maple_tree.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 88a783be04d7..45fc3874782f 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); - } } /* -- 2.50.1