maple_tree: simplify mas_wr_node_walk()
authorPeng Zhang <zhangpeng.00@bytedance.com>
Tue, 14 Mar 2023 12:42:02 +0000 (20:42 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 18 Apr 2023 23:29:53 +0000 (16:29 -0700)
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>
lib/maple_tree.c

index 4a6ecdb12a92a6228ac29d556db6bf22adfa296b..f475bac9d91466ae45afd686406736f7b030ad5f 100644 (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;
-
-       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;
-       }
+       while (offset < count && mas->index > wr_mas->pivots[offset])
+               offset++;
 
-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;
 }