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;
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;
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))