From 3613788f2ba032b8c7602355ba8b8267d1d10b9a Mon Sep 17 00:00:00 2001 From: "Liam R. Howlett" Date: Wed, 9 Sep 2020 12:01:57 -0400 Subject: [PATCH] maple_tree: use ma_get_slots() in mas_next_node loop Signed-off-by: Liam R. Howlett --- lib/maple_tree.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index f5ef8324e939..a58935b56a10 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -3242,35 +3242,37 @@ static inline unsigned long mas_next_node(struct ma_state *mas, restart_next_node: level = 0; while (1) { - unsigned char count; - int slot; + int offset; struct maple_enode *mn; unsigned long prev_piv; + enum maple_type mt; + void **slots; if (mte_is_root(mas->node) || mas->node == MAS_NONE) goto no_entry; mn = mas->node; - slot = mas_offset(mas); - start_piv = mas_safe_pivot(mas, slot); + offset= mas_offset(mas); + start_piv = mas_safe_pivot(mas, offset); level++; mas_ascend(mas); if (mas_dead_node(mas, start_piv)) goto restart_next_node; - count = mt_slot_count(mas->node); - prev_piv = mas_safe_pivot(mas, slot); - while (++slot < count) { - unsigned long pivot = mas_safe_pivot(mas, slot); + mt = mte_node_type(mas->node); + slots = ma_get_slots(mas_mn(mas), mt); + prev_piv = mas_safe_pivot(mas, offset); + while (++offset< mt_slots[mt]) { + unsigned long pivot = mas_safe_pivot(mas, offset); if (prev_piv > max) goto no_entry; - if (slot != 0 && pivot == 0) + if (offset!= 0 && pivot == 0) break; - mn = mas_get_slot(mas, slot); + mn = rcu_dereference(slots[offset]); if (!mn) { prev_piv = pivot; continue; @@ -3280,7 +3282,7 @@ restart_next_node: mas->max = pivot; if (level == 1) { - mas_set_offset(mas, slot); + mas_set_offset(mas, offset); mas->node = mn; if (mas_dead_node(mas, start_piv)) goto restart_next_node; @@ -3290,8 +3292,9 @@ restart_next_node: level--; mas->node = mn; - slot = -1; - count = mt_slot_count(mas->node); + offset = -1; + mt = mte_node_type(mas->node); + slots = ma_get_slots(mas_mn(mas), mt); } if (mte_is_root(mas->node)) -- 2.50.1