maple_tree: remove mas_searchable()
authorLiam R. Howlett <Liam.Howlett@oracle.com>
Wed, 1 Nov 2023 17:16:26 +0000 (13:16 -0400)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 12 Dec 2023 18:56:58 +0000 (10:56 -0800)
Now that the status of the maple state is outside of the node, the
mas_searchable() function can be dropped for easier open-coding of what is
going on.

Link: https://lkml.kernel.org/r/20231101171629.3612299-10-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
Cc: Peng Zhang <zhangpeng.00@bytedance.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
lib/maple_tree.c
tools/testing/radix-tree/maple.c

index 187a9796188e5faac41de5cc7a2825749929611a..c7016066f12bbd146e3c157037c33846eb4fccb9 100644 (file)
@@ -285,17 +285,6 @@ static inline bool mas_is_underflow(struct ma_state *mas)
        return mas->status == ma_underflow;
 }
 
-static inline bool mas_searchable(struct ma_state *mas)
-{
-       if (mas_is_none(mas))
-               return false;
-
-       if (mas_is_ptr(mas))
-               return false;
-
-       return true;
-}
-
 static __always_inline struct maple_node *mte_to_node(
                const struct maple_enode *entry)
 {
@@ -6030,12 +6019,11 @@ static __always_inline bool mas_find_setup(struct ma_state *mas, unsigned long m
 
        }
 
-       if (unlikely(!mas_searchable(mas))) {
-               if (unlikely(mas_is_ptr(mas)))
-                       goto ptr_out_of_range;
+       if (unlikely(mas_is_ptr(mas)))
+               goto ptr_out_of_range;
 
+       if (unlikely(mas_is_none(mas)))
                return true;
-       }
 
        if (mas->index == max)
                return true;
@@ -6162,20 +6150,18 @@ static bool mas_find_rev_setup(struct ma_state *mas, unsigned long min,
                        return true;
        }
 
-       if (unlikely(!mas_searchable(mas))) {
-               if (mas_is_ptr(mas))
-                       goto none;
+       if (unlikely(mas_is_ptr(mas)))
+               goto none;
 
-               if (mas_is_none(mas)) {
-                       /*
-                        * Walked to the location, and there was nothing so the
-                        * previous location is 0.
-                        */
-                       mas->last = mas->index = 0;
-                       mas->status = ma_root;
-                       *entry = mas_root(mas);
-                       return true;
-               }
+       if (unlikely(mas_is_none(mas))) {
+               /*
+                * Walked to the location, and there was nothing so the previous
+                * location is 0.
+                */
+               mas->last = mas->index = 0;
+               mas->status = ma_root;
+               *entry = mas_root(mas);
+               return true;
        }
 
 active:
@@ -6905,7 +6891,7 @@ retry:
        if (entry)
                goto unlock;
 
-       while (mas_searchable(&mas) && (mas.last < max)) {
+       while (mas_is_active(&mas) && (mas.last < max)) {
                entry = mas_next_entry(&mas, max);
                if (likely(entry && !xa_is_zero(entry)))
                        break;
@@ -6987,26 +6973,6 @@ unsigned int mt_nr_allocated(void)
        return kmem_cache_nr_allocated(maple_node_cache);
 }
 
-/*
- * mas_dead_node() - Check if the maple state is pointing to a dead node.
- * @mas: The maple state
- * @index: The index to restore in @mas.
- *
- * Used in test code.
- * Return: 1 if @mas has been reset to MAS_START, 0 otherwise.
- */
-static inline int mas_dead_node(struct ma_state *mas, unsigned long index)
-{
-       if (unlikely(!mas_searchable(mas) || mas_is_start(mas)))
-               return 0;
-
-       if (likely(!mte_dead_node(mas->node)))
-               return 0;
-
-       mas_rewalk(mas, index);
-       return 1;
-}
-
 void mt_cache_shrink(void)
 {
 }
@@ -7558,7 +7524,7 @@ void mt_validate(struct maple_tree *mt)
        MA_STATE(mas, mt, 0, 0);
        rcu_read_lock();
        mas_start(&mas);
-       if (!mas_searchable(&mas))
+       if (!mas_is_active(&mas))
                goto done;
 
        while (!mte_is_leaf(mas.node))
index 857c439e6bbc2c253034795ffabeb999ba49938b..56ae47291ee0784dfa8005274e2121f12f089444 100644 (file)
@@ -974,8 +974,10 @@ retry:
        if (likely(mas->offset != MAPLE_NODE_SLOTS))
                entry = mas_get_slot(mas, mas->offset);
 
-       if (mas_dead_node(mas, index))
+       if (mas_is_active(mas) && mte_dead_node(mas->node)) {
+               mas_set(mas, index);
                goto retry;
+       }
 
        return entry;
 }