]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
maple_tree: Change mas_replace to use ma_get_slots
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Tue, 8 Sep 2020 17:39:05 +0000 (13:39 -0400)
committerLiam R. Howlett <Liam.Howlett@Oracle.com>
Fri, 30 Oct 2020 19:11:23 +0000 (15:11 -0400)
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
lib/maple_tree.c

index b618acfb2e99cc7c3b3ee0a10e3482560d1195d1..dcb0f2db16153502419b16bbee451c3f635a9854 100644 (file)
@@ -1286,19 +1286,21 @@ static inline void mas_adopt_children(struct ma_state *mas,
  */
 static inline void mas_replace(struct ma_state *mas, bool advanced)
 {
-       struct maple_node *mn = mas_mn(mas);
-       struct maple_enode *parent = NULL;
-       struct maple_enode *prev;
-       unsigned char slot = 0;
+       struct maple_node *parent, *mn = mas_mn(mas);
+       struct maple_enode *prev, *eparent = NULL;
+       unsigned char offset = 0;
+       void **slots;
 
        if (mte_is_root(mas->node)) {
                prev = mas->tree->ma_root;
        } else {
                enum maple_type ptype = mas_parent_enum(mas, mas->node);
 
-               parent = mt_mk_node(mte_parent(mas->node), ptype);
-               slot = mte_parent_slot(mas->node);
-               prev = mte_get_slot(parent, slot, mas->tree);
+               parent = mte_parent(mas->node);
+               eparent = mt_mk_node(parent, ptype);
+               offset = mte_parent_slot(mas->node);
+               slots = ma_get_slots(parent, ptype);
+               prev = slots[offset];
        }
 
        if (mte_to_node(prev) == mn)
@@ -1313,7 +1315,7 @@ static inline void mas_replace(struct ma_state *mas, bool advanced)
                rcu_assign_pointer(mas->tree->ma_root, mte_mk_root(mas->node));
                mas_set_height(mas);
        } else {
-               mte_set_slot(parent, slot, mas->node);
+               mte_set_slot(eparent, offset, mas->node);
        }
 
        if (!advanced)