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

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.com


Signed-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
Loading
Loading
Loading
Loading
+16 −50
Original line number Diff line number Diff line
@@ -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_none(mas)))
		return true;
	}

	if (mas->index == max)
		return true;
@@ -6162,21 +6150,19 @@ 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))
	if (unlikely(mas_is_ptr(mas)))
		goto none;

		if (mas_is_none(mas)) {
	if (unlikely(mas_is_none(mas))) {
		/*
			 * Walked to the location, and there was nothing so the
			 * previous location is 0.
		 * 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:
	if (mas->index < min)
@@ -6905,7 +6891,7 @@ void *mt_find(struct maple_tree *mt, unsigned long *index, unsigned long max)
	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))
+3 −1
Original line number Diff line number Diff line
@@ -974,8 +974,10 @@ static inline void *mas_range_load(struct ma_state *mas,
	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;
}