radix-tree: delete radix_tree_locate_item()
This rather complicated function can be better implemented as an iterator. It has only one caller, so move the functionality to the only place that needs it. Update the test suite to follow the same pattern. Link: http://lkml.kernel.org/r/1480369871-5271-56-git-send-email-mawilcox@linuxonhyperv.com Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com> Acked-by: Konstantin Khlebnikov <koct9i@gmail.com> Tested-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Ross Zwisler <ross.zwisler@linux.intel.com> Cc: Matthew Wilcox <mawilcox@microsoft.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
148deab223
commit
478922e2b0
@@ -239,7 +239,7 @@ static void __locate_check(struct radix_tree_root *tree, unsigned long index,
|
||||
|
||||
item_insert_order(tree, index, order);
|
||||
item = item_lookup(tree, index);
|
||||
index2 = radix_tree_locate_item(tree, item);
|
||||
index2 = find_item(tree, item);
|
||||
if (index != index2) {
|
||||
printf("index %ld order %d inserted; found %ld\n",
|
||||
index, order, index2);
|
||||
@@ -273,17 +273,17 @@ static void locate_check(void)
|
||||
index += (1UL << order)) {
|
||||
__locate_check(&tree, index + offset, order);
|
||||
}
|
||||
if (radix_tree_locate_item(&tree, &tree) != -1)
|
||||
if (find_item(&tree, &tree) != -1)
|
||||
abort();
|
||||
|
||||
item_kill_tree(&tree);
|
||||
}
|
||||
}
|
||||
|
||||
if (radix_tree_locate_item(&tree, &tree) != -1)
|
||||
if (find_item(&tree, &tree) != -1)
|
||||
abort();
|
||||
__locate_check(&tree, -1, 0);
|
||||
if (radix_tree_locate_item(&tree, &tree) != -1)
|
||||
if (find_item(&tree, &tree) != -1)
|
||||
abort();
|
||||
item_kill_tree(&tree);
|
||||
}
|
||||
|
@@ -151,6 +151,28 @@ void item_full_scan(struct radix_tree_root *root, unsigned long start,
|
||||
assert(nfound == 0);
|
||||
}
|
||||
|
||||
/* Use the same pattern as find_swap_entry() in mm/shmem.c */
|
||||
unsigned long find_item(struct radix_tree_root *root, void *item)
|
||||
{
|
||||
struct radix_tree_iter iter;
|
||||
void **slot;
|
||||
unsigned long found = -1;
|
||||
unsigned long checked = 0;
|
||||
|
||||
radix_tree_for_each_slot(slot, root, &iter, 0) {
|
||||
if (*slot == item) {
|
||||
found = iter.index;
|
||||
break;
|
||||
}
|
||||
checked++;
|
||||
if ((checked % 4) != 0)
|
||||
continue;
|
||||
slot = radix_tree_iter_resume(slot, &iter);
|
||||
}
|
||||
|
||||
return found;
|
||||
}
|
||||
|
||||
static int verify_node(struct radix_tree_node *slot, unsigned int tag,
|
||||
int tagged)
|
||||
{
|
||||
|
@@ -25,6 +25,8 @@ void item_full_scan(struct radix_tree_root *root, unsigned long start,
|
||||
unsigned long nr, int chunk);
|
||||
void item_kill_tree(struct radix_tree_root *root);
|
||||
|
||||
unsigned long find_item(struct radix_tree_root *, void *item);
|
||||
|
||||
void tag_check(void);
|
||||
void multiorder_checks(void);
|
||||
void iteration_test(void);
|
||||
|
Reference in New Issue
Block a user