{
void *contents = mas_root_locked(mas);
enum maple_type type = maple_leaf_64;
+ struct maple_node *node;
+ void **slots;
+ unsigned long *pivots;
int slot = 0;
if (mas_is_err(mas))
return 0;
- mas->node = mt_mk_node(mas_next_alloc(mas), type);
+ node = mas_next_alloc(mas);
+ pivots = ma_pivots(node, type);
+ slots = ma_slots(node, type);
+ mas->node = mt_mk_node(node, type);
mas_mn(mas)->parent = ma_parent_ptr(
((unsigned long)mas->tree | MA_ROOT_PARENT));
if (contents)
- mte_set_slot(mas->node, slot++, contents);
+ slots[slot++] = contents;
if (!mas->index && slot)
slot--;
else if (mas->index > 1)
- mte_set_pivot(mas->node, slot++, mas->index - 1);
+ pivots[slot++] = mas->index - 1;
- mte_set_slot(mas->node, slot, entry);
- mte_set_pivot(mas->node, slot++, mas->last);
+ slots[slot] = entry;
+ pivots[slot++] = mas->last;
/* swap the new root into the tree */
rcu_assign_pointer(mas->tree->ma_root, mte_mk_root(mas->node));
mas->depth = 1;
return NULL;
if (mas_is_start(mas)) {// First run.
- *range_start = 0;
mas_start(mas);
+ *range_start = 0;
entry = mas_range_load(mas, range_start, &range_max);
mas->last = range_max;
if (entry)