Commit 9a40d45c authored by Liam R. Howlett's avatar Liam R. Howlett Committed by Andrew Morton

maple_tree: remove mas_searchable()

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.comSigned-off-by: default avatarLiam R. Howlett <Liam.Howlett@oracle.com>
Cc: Peng Zhang <zhangpeng.00@bytedance.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 067311d3
...@@ -285,17 +285,6 @@ static inline bool mas_is_underflow(struct ma_state *mas) ...@@ -285,17 +285,6 @@ static inline bool mas_is_underflow(struct ma_state *mas)
return mas->status == ma_underflow; 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( static __always_inline struct maple_node *mte_to_node(
const struct maple_enode *entry) const struct maple_enode *entry)
{ {
...@@ -6030,12 +6019,11 @@ static __always_inline bool mas_find_setup(struct ma_state *mas, unsigned long m ...@@ -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)))
if (unlikely(mas_is_ptr(mas))) goto ptr_out_of_range;
goto ptr_out_of_range;
if (unlikely(mas_is_none(mas)))
return true; return true;
}
if (mas->index == max) if (mas->index == max)
return true; return true;
...@@ -6162,20 +6150,18 @@ static bool mas_find_rev_setup(struct ma_state *mas, unsigned long min, ...@@ -6162,20 +6150,18 @@ static bool mas_find_rev_setup(struct ma_state *mas, unsigned long min,
return true; return true;
} }
if (unlikely(!mas_searchable(mas))) { if (unlikely(mas_is_ptr(mas)))
if (mas_is_ptr(mas)) goto none;
goto none;
if (mas_is_none(mas)) { if (unlikely(mas_is_none(mas))) {
/* /*
* Walked to the location, and there was nothing so the * Walked to the location, and there was nothing so the previous
* previous location is 0. * location is 0.
*/ */
mas->last = mas->index = 0; mas->last = mas->index = 0;
mas->status = ma_root; mas->status = ma_root;
*entry = mas_root(mas); *entry = mas_root(mas);
return true; return true;
}
} }
active: active:
...@@ -6905,7 +6891,7 @@ void *mt_find(struct maple_tree *mt, unsigned long *index, unsigned long max) ...@@ -6905,7 +6891,7 @@ void *mt_find(struct maple_tree *mt, unsigned long *index, unsigned long max)
if (entry) if (entry)
goto unlock; goto unlock;
while (mas_searchable(&mas) && (mas.last < max)) { while (mas_is_active(&mas) && (mas.last < max)) {
entry = mas_next_entry(&mas, max); entry = mas_next_entry(&mas, max);
if (likely(entry && !xa_is_zero(entry))) if (likely(entry && !xa_is_zero(entry)))
break; break;
...@@ -6987,26 +6973,6 @@ unsigned int mt_nr_allocated(void) ...@@ -6987,26 +6973,6 @@ unsigned int mt_nr_allocated(void)
return kmem_cache_nr_allocated(maple_node_cache); 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) void mt_cache_shrink(void)
{ {
} }
...@@ -7558,7 +7524,7 @@ void mt_validate(struct maple_tree *mt) ...@@ -7558,7 +7524,7 @@ void mt_validate(struct maple_tree *mt)
MA_STATE(mas, mt, 0, 0); MA_STATE(mas, mt, 0, 0);
rcu_read_lock(); rcu_read_lock();
mas_start(&mas); mas_start(&mas);
if (!mas_searchable(&mas)) if (!mas_is_active(&mas))
goto done; goto done;
while (!mte_is_leaf(mas.node)) while (!mte_is_leaf(mas.node))
......
...@@ -974,8 +974,10 @@ static inline void *mas_range_load(struct ma_state *mas, ...@@ -974,8 +974,10 @@ static inline void *mas_range_load(struct ma_state *mas,
if (likely(mas->offset != MAPLE_NODE_SLOTS)) if (likely(mas->offset != MAPLE_NODE_SLOTS))
entry = mas_get_slot(mas, mas->offset); 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; goto retry;
}
return entry; return entry;
} }
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