static noinline void mas_wr_spanning_rebalance(struct ma_state *mas,
- struct maple_subtree_state *mast, unsigned char height,
- struct ma_wr_state *wr_mas)
+ struct maple_subtree_state *mast, struct ma_wr_state *wr_mas)
{
struct maple_big_node b_node;
+ unsigned char height;
MA_STATE(l_mas, mas->tree, mas->index, mas->index);
MA_STATE(r_mas, mas->tree, mas->index, mas->last);
MA_STATE(m_mas, mas->tree, mas->index, mas->index);
unlikely(mast->bn->b_end <= mt_min_slots[mast->bn->type]))
mast_spanning_rebalance(mast);
+ height = mas_mt_height(mas) + 1;
mas_spanning_rebalance_loop(mas, mast, height);
}
/*
{
struct maple_subtree_state mast;
struct ma_state *mas;
- unsigned char height;
/* Left and Right side of spanning store */
MA_STATE(l_mas, NULL, 0, 0);
* Node rebalancing may occur due to this store, so there may be three new
* entries per level plus a new root.
*/
- height = mas_mt_height(mas);
/*
* Set up right side. Need to get to the next offset after the spanning
l_mas = *mas;
mast.orig_l = &l_mas;
mast.orig_r = &r_mas;
- mas_wr_spanning_rebalance(mas, &mast, height + 1, wr_mas);
+ mas_wr_spanning_rebalance(mas, &mast, wr_mas);
}
/*