*/
static inline void mast_topiary(struct maple_subtree_state *mast)
{
- unsigned char l_slot, r_slot, slot, end;
+ unsigned char l_slot, r_slot, slot;
unsigned long l_index, range_min, range_max;
+ struct maple_enode *child;
// The left node is consumed, so add to the free list.
l_index = mast->orig_l->index;
return;
/* Now destroy l_slot + 1 -> end and 0 -> r_slot - 1 */
- end = mas_data_end(mast->orig_l);
- for (slot = l_slot + 1; slot <= end; slot++)
- mat_add(mast->destroy, mas_get_slot(mast->orig_l, slot));
+ slot = l_slot + 1;
+ while (slot < mt_slot_count(mast->orig_l->node)) {
+ child = mas_get_slot(mast->orig_l, slot++);
+ if (!child)
+ break;
+ mat_add(mast->destroy, child);
+ }
for (slot = 0; slot < r_slot; slot++)
mat_add(mast->destroy, mas_get_slot(mast->orig_r, slot));
type = mte_node_type(mas->node);
mas->depth++;
- end = mas_data_end(mas);
if (unlikely(!mas_node_walk(mas, type, range_min, range_max)))
return false;
if (ma_is_leaf(type))
return true;
+ end = mas_data_end(mas);
if (end <= mt_min_slots[type])
mas_cnt_empty(mas);
else if (end >= mt_slots[type] - 2)