maple_tree: simplify mas_wr_node_walk()

Simplify code of mas_wr_node_walk() without changing functionality, and
improve readability.  Remove some special judgments.  Instead of
dynamically recording the min and max in the loop, get the final min and
max directly at the end.

Link: https://lkml.kernel.org/r/20230314124203.91572-3-zhangpeng.00@bytedance.com
Signed-off-by: Peng Zhang <zhangpeng.00@bytedance.com>
Reviewed-by: Liam R. Howlett <Liam.Howlett@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Peng Zhang 2023-03-14 20:42:02 +08:00 committed by Andrew Morton
parent 9bc47f1152
commit 97f7e09481
1 changed files with 5 additions and 29 deletions

View File

@ -2312,9 +2312,7 @@ static inline struct maple_enode *mte_node_or_none(struct maple_enode *enode)
static inline void mas_wr_node_walk(struct ma_wr_state *wr_mas)
{
struct ma_state *mas = wr_mas->mas;
unsigned char count;
unsigned char offset;
unsigned long index, min, max;
unsigned char count, offset;
if (unlikely(ma_is_dense(wr_mas->type))) {
wr_mas->r_max = wr_mas->r_min = mas->index;
@ -2327,34 +2325,12 @@ static inline void mas_wr_node_walk(struct ma_wr_state *wr_mas)
count = wr_mas->node_end = ma_data_end(wr_mas->node, wr_mas->type,
wr_mas->pivots, mas->max);
offset = mas->offset;
min = mas_safe_min(mas, wr_mas->pivots, offset);
if (unlikely(offset == count))
goto max;
max = wr_mas->pivots[offset];
index = mas->index;
if (unlikely(index <= max))
goto done;
while (offset < count && mas->index > wr_mas->pivots[offset])
offset++;
if (unlikely(!max && offset))
goto max;
min = max + 1;
while (++offset < count) {
max = wr_mas->pivots[offset];
if (index <= max)
goto done;
else if (unlikely(!max))
break;
min = max + 1;
}
max:
max = mas->max;
done:
wr_mas->r_max = max;
wr_mas->r_min = min;
wr_mas->r_max = offset < count ? wr_mas->pivots[offset] : mas->max;
wr_mas->r_min = mas_safe_min(mas, wr_mas->pivots, offset);
wr_mas->offset_end = mas->offset = offset;
}