Commit 372266ba authored by Matthew Wilcox's avatar Matthew Wilcox
Browse files

radix tree test suite: Convert tag_tagged_items to XArray



The tag_tagged_items() function is supposed to test the page-writeback
tagging code.  Since that has been converted to the XArray, there's
not much point in testing the radix tree's tagging code.  This requires
using the pthread mutex embedded in the xarray instead of an external
lock, so remove the pthread mutexes which protect xarrays/radix trees.
Also remove radix_tree_iter_tag_set() as this was the last user.

Signed-off-by: default avatarMatthew Wilcox <willy@infradead.org>
parent adb9d9c4
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -264,8 +264,6 @@ void *radix_tree_tag_clear(struct radix_tree_root *,
			unsigned long index, unsigned int tag);
int radix_tree_tag_get(const struct radix_tree_root *,
			unsigned long index, unsigned int tag);
void radix_tree_iter_tag_set(struct radix_tree_root *,
		const struct radix_tree_iter *iter, unsigned int tag);
void radix_tree_iter_tag_clear(struct radix_tree_root *,
		const struct radix_tree_iter *iter, unsigned int tag);
unsigned int radix_tree_gang_lookup_tag(const struct radix_tree_root *,
+0 −12
Original line number Diff line number Diff line
@@ -1108,18 +1108,6 @@ void *radix_tree_tag_set(struct radix_tree_root *root,
}
EXPORT_SYMBOL(radix_tree_tag_set);

/**
 * radix_tree_iter_tag_set - set a tag on the current iterator entry
 * @root:	radix tree root
 * @iter:	iterator state
 * @tag:	tag to set
 */
void radix_tree_iter_tag_set(struct radix_tree_root *root,
			const struct radix_tree_iter *iter, unsigned int tag)
{
	node_tag_set(root, iter->node, tag, iter_offset(iter));
}

static void node_tag_clear(struct radix_tree_root *root,
				struct radix_tree_node *node,
				unsigned int tag, unsigned int offset)
+7 −9
Original line number Diff line number Diff line
@@ -18,10 +18,9 @@

#define NUM_THREADS	5
#define MAX_IDX		100
#define TAG		0
#define NEW_TAG		1
#define TAG		XA_MARK_0
#define NEW_TAG		XA_MARK_1

static pthread_mutex_t tree_lock = PTHREAD_MUTEX_INITIALIZER;
static pthread_t threads[NUM_THREADS];
static unsigned int seeds[3];
static RADIX_TREE(tree, GFP_KERNEL);
@@ -38,7 +37,7 @@ static void *add_entries_fn(void *arg)
		int order;

		for (pgoff = 0; pgoff < MAX_IDX; pgoff++) {
			pthread_mutex_lock(&tree_lock);
			xa_lock(&tree);
			for (order = max_order; order >= 0; order--) {
				if (item_insert_order(&tree, pgoff, order)
						== 0) {
@@ -46,7 +45,7 @@ static void *add_entries_fn(void *arg)
					break;
				}
			}
			pthread_mutex_unlock(&tree_lock);
			xa_unlock(&tree);
		}
	}

@@ -150,9 +149,9 @@ static void *remove_entries_fn(void *arg)

		pgoff = rand_r(&seeds[2]) % MAX_IDX;

		pthread_mutex_lock(&tree_lock);
		xa_lock(&tree);
		item_delete(&tree, pgoff);
		pthread_mutex_unlock(&tree_lock);
		xa_unlock(&tree);
	}

	rcu_unregister_thread();
@@ -165,8 +164,7 @@ static void *tag_entries_fn(void *arg)
	rcu_register_thread();

	while (!test_complete) {
		tag_tagged_items(&tree, &tree_lock, 0, MAX_IDX, 10, TAG,
					NEW_TAG);
		tag_tagged_items(&tree, 0, MAX_IDX, 10, TAG, NEW_TAG);
	}
	rcu_unregister_thread();
	return NULL;
+2 −2
Original line number Diff line number Diff line
@@ -214,7 +214,7 @@ void copy_tag_check(void)
	}

//	printf("\ncopying tags...\n");
	tagged = tag_tagged_items(&tree, NULL, start, end, ITEMS, 0, 1);
	tagged = tag_tagged_items(&tree, start, end, ITEMS, XA_MARK_0, XA_MARK_1);

//	printf("checking copied tags\n");
	assert(tagged == count);
@@ -223,7 +223,7 @@ void copy_tag_check(void)
	/* Copy tags in several rounds */
//	printf("\ncopying tags...\n");
	tmp = rand() % (count / 10 + 2);
	tagged = tag_tagged_items(&tree, NULL, start, end, tmp, 0, 2);
	tagged = tag_tagged_items(&tree, start, end, tmp, XA_MARK_0, XA_MARK_2);
	assert(tagged == count);

//	printf("%lu %lu %lu\n", tagged, tmp, count);
+6 −6
Original line number Diff line number Diff line
@@ -59,7 +59,7 @@ static void __multiorder_tag_test(int index, int order)
		assert(!radix_tree_tag_get(&tree, i, 1));
	}

	assert(tag_tagged_items(&tree, NULL, 0, ~0UL, 10, 0, 1) == 1);
	assert(tag_tagged_items(&tree, 0, ~0UL, 10, XA_MARK_0, XA_MARK_1) == 1);
	assert(radix_tree_tag_clear(&tree, index, 0));

	for_each_index(i, base, order) {
@@ -87,7 +87,7 @@ static void __multiorder_tag_test2(unsigned order, unsigned long index2)
	assert(radix_tree_tag_set(&tree, 0, 0));
	assert(radix_tree_tag_set(&tree, index2, 0));

	assert(tag_tagged_items(&tree, NULL, 0, ~0UL, 10, 0, 1) == 2);
	assert(tag_tagged_items(&tree, 0, ~0UL, 10, XA_MARK_0, XA_MARK_1) == 2);

	item_kill_tree(&tree);
}
@@ -318,8 +318,8 @@ void multiorder_tagged_iteration(void)
		}
	}

	assert(tag_tagged_items(&tree, NULL, 0, ~0UL, TAG_ENTRIES, 1, 2) ==
				TAG_ENTRIES);
	assert(tag_tagged_items(&tree, 0, ~0UL, TAG_ENTRIES, XA_MARK_1,
				XA_MARK_2) == TAG_ENTRIES);

	for (j = 0; j < 256; j++) {
		int mask, k;
@@ -345,8 +345,8 @@ void multiorder_tagged_iteration(void)
		}
	}

	assert(tag_tagged_items(&tree, NULL, 1, ~0UL, MT_NUM_ENTRIES * 2, 1, 0)
			== TAG_ENTRIES);
	assert(tag_tagged_items(&tree, 1, ~0UL, MT_NUM_ENTRIES * 2, XA_MARK_1,
				XA_MARK_0) == TAG_ENTRIES);
	i = 0;
	radix_tree_for_each_tagged(slot, &tree, &iter, 0, 0) {
		assert(iter.index == tag_index[i]);
Loading