summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/testing/radix-tree/test.c30
1 files changed, 9 insertions, 21 deletions
diff --git a/tools/testing/radix-tree/test.c b/tools/testing/radix-tree/test.c
index 5376b8c5d8d6..19045ce3bd23 100644
--- a/tools/testing/radix-tree/test.c
+++ b/tools/testing/radix-tree/test.c
@@ -252,31 +252,19 @@ void verify_tag_consistency(struct radix_tree_root *root, unsigned int tag)
252 verify_node(node, tag, !!root_tag_get(root, tag)); 252 verify_node(node, tag, !!root_tag_get(root, tag));
253} 253}
254 254
255void item_kill_tree(struct radix_tree_root *root) 255void item_kill_tree(struct xarray *xa)
256{ 256{
257 struct radix_tree_iter iter; 257 XA_STATE(xas, xa, 0);
258 void **slot; 258 void *entry;
259 struct item *items[32];
260 int nfound;
261
262 radix_tree_for_each_slot(slot, root, &iter, 0) {
263 if (xa_is_value(*slot))
264 radix_tree_delete(root, iter.index);
265 }
266
267 while ((nfound = radix_tree_gang_lookup(root, (void **)items, 0, 32))) {
268 int i;
269
270 for (i = 0; i < nfound; i++) {
271 void *ret;
272 259
273 ret = radix_tree_delete(root, items[i]->index); 260 xas_for_each(&xas, entry, ULONG_MAX) {
274 assert(ret == items[i]); 261 if (!xa_is_value(entry)) {
275 free(items[i]); 262 item_free(entry, xas.xa_index);
276 } 263 }
264 xas_store(&xas, NULL);
277 } 265 }
278 assert(radix_tree_gang_lookup(root, (void **)items, 0, 32) == 0); 266
279 assert(root->xa_head == NULL); 267 assert(xa_empty(xa));
280} 268}
281 269
282void tree_verify_min_height(struct radix_tree_root *root, int maxindex) 270void tree_verify_min_height(struct radix_tree_root *root, int maxindex)