Commit 97f7e094 authored by Peng Zhang's avatar Peng Zhang Committed by Andrew Morton

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.comSigned-off-by: default avatarPeng Zhang <zhangpeng.00@bytedance.com>
Reviewed-by: default avatarLiam R. Howlett <Liam.Howlett@oracle.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 9bc47f11
...@@ -2312,9 +2312,7 @@ static inline struct maple_enode *mte_node_or_none(struct maple_enode *enode) ...@@ -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) static inline void mas_wr_node_walk(struct ma_wr_state *wr_mas)
{ {
struct ma_state *mas = wr_mas->mas; struct ma_state *mas = wr_mas->mas;
unsigned char count; unsigned char count, offset;
unsigned char offset;
unsigned long index, min, max;
if (unlikely(ma_is_dense(wr_mas->type))) { if (unlikely(ma_is_dense(wr_mas->type))) {
wr_mas->r_max = wr_mas->r_min = mas->index; 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) ...@@ -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, count = wr_mas->node_end = ma_data_end(wr_mas->node, wr_mas->type,
wr_mas->pivots, mas->max); wr_mas->pivots, mas->max);
offset = mas->offset; 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;
if (unlikely(!max && offset))
goto max;
min = max + 1; while (offset < count && mas->index > wr_mas->pivots[offset])
while (++offset < count) { offset++;
max = wr_mas->pivots[offset];
if (index <= max)
goto done;
else if (unlikely(!max))
break;
min = max + 1;
}
max: wr_mas->r_max = offset < count ? wr_mas->pivots[offset] : mas->max;
max = mas->max; wr_mas->r_min = mas_safe_min(mas, wr_mas->pivots, offset);
done:
wr_mas->r_max = max;
wr_mas->r_min = min;
wr_mas->offset_end = mas->offset = offset; wr_mas->offset_end = mas->offset = offset;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment