From: Liam R. Howlett Date: Thu, 25 Nov 2021 18:43:56 +0000 (-0500) Subject: maple_tree: Move wr_mas offset_end setting to walk X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=d122b4b312a1f7f178605e56298e1cbf65e61f0b;p=users%2Fjedix%2Flinux-maple.git maple_tree: Move wr_mas offset_end setting to walk Signed-off-by: Liam R. Howlett --- diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 093423fedc0aa..152c3a5af82b2 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -2168,7 +2168,7 @@ max: done: wr_mas->r_max = max; wr_mas->r_min = min; - mas->offset = offset; + wr_mas->offset_end = mas->offset = offset; } /* @@ -3548,16 +3548,17 @@ static bool mas_wr_walk(struct ma_wr_state *wr_mas) while (true) { mas_wr_walk_descend(wr_mas); - if (mas_is_span_wr(wr_mas)) + if (unlikely(mas_is_span_wr(wr_mas))) return false; wr_mas->content = mas_slot_locked(mas, wr_mas->slots, mas->offset); if (ma_is_leaf(wr_mas->type)) return true; - mas_wr_walk_traverse(wr_mas); + mas_wr_walk_traverse(wr_mas); } + return true; } @@ -4316,19 +4317,18 @@ static inline void *mas_store_entry(struct ma_wr_state *wr_mas) { struct ma_state *mas = wr_mas->mas; - if ((wr_mas->content = mas_start(mas)) || - mas_is_none(mas) || mas->node == MAS_ROOT) { + if ((wr_mas->content = mas_start(mas)) || mas_is_none(mas) || + mas_is_ptr(mas)) { mas_store_root(mas, wr_mas->entry); return wr_mas->content; } - if (!mas_wr_walk(wr_mas)) { + if (unlikely(!mas_wr_walk(wr_mas))) { mas_spanning_store(wr_mas); return wr_mas->content; } /* At this point, we are at the leaf node that needs to be altered. */ - wr_mas->offset_end = mas->offset; wr_mas->end_piv = wr_mas->r_max; mas_wr_end_piv(wr_mas); @@ -4336,7 +4336,7 @@ static inline void *mas_store_entry(struct ma_wr_state *wr_mas) mas_wr_extend_null(wr_mas); /* New root for a single pointer */ - if (!mas->index && mas->last == ULONG_MAX) { + if (unlikely(!mas->index && mas->last == ULONG_MAX)) { mas_new_root(mas, wr_mas->entry); return wr_mas->content; }