mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 07:12:09 +00:00
radix-tree: delete radix_tree_range_tag_if_tagged()
This is an exceptionally complicated function with just one caller (tag_pages_for_writeback). We devote a large portion of the runtime of the test suite to testing this one function which has one caller. By introducing the new function radix_tree_iter_tag_set(), we can eliminate all of the complexity while keeping the performance. The caller can now use a fairly standard radix_tree_for_each() loop, and it doesn't need to worry about tricksy things like 'start' wrapping. The test suite continues to spend a large amount of time investigating this function, but now it's testing the underlying primitives such as radix_tree_iter_resume() and the radix_tree_for_each_tagged() iterator which are also used by other parts of the kernel. Link: http://lkml.kernel.org/r/1480369871-5271-57-git-send-email-mawilcox@linuxonhyperv.com Signed-off-by: Matthew Wilcox <willy@infradead.org> Tested-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Konstantin Khlebnikov <koct9i@gmail.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:
parent
478922e2b0
commit
268f42de71
9 changed files with 124 additions and 162 deletions
|
@ -205,8 +205,7 @@ void copy_tag_check(void)
|
|||
}
|
||||
|
||||
// printf("\ncopying tags...\n");
|
||||
cur = start;
|
||||
tagged = radix_tree_range_tag_if_tagged(&tree, &cur, end, ITEMS, 0, 1);
|
||||
tagged = tag_tagged_items(&tree, NULL, start, end, ITEMS, 0, 1);
|
||||
|
||||
// printf("checking copied tags\n");
|
||||
assert(tagged == count);
|
||||
|
@ -214,16 +213,13 @@ void copy_tag_check(void)
|
|||
|
||||
/* Copy tags in several rounds */
|
||||
// printf("\ncopying tags...\n");
|
||||
cur = start;
|
||||
do {
|
||||
tmp = rand() % (count/10+2);
|
||||
tagged = radix_tree_range_tag_if_tagged(&tree, &cur, end, tmp, 0, 2);
|
||||
} while (tmp == tagged);
|
||||
tmp = rand() % (count / 10 + 2);
|
||||
tagged = tag_tagged_items(&tree, NULL, start, end, tmp, 0, 2);
|
||||
assert(tagged == count);
|
||||
|
||||
// printf("%lu %lu %lu\n", tagged, tmp, count);
|
||||
// printf("checking copied tags\n");
|
||||
check_copied_tags(&tree, start, end, idx, ITEMS, 0, 2);
|
||||
assert(tagged < tmp);
|
||||
verify_tag_consistency(&tree, 0);
|
||||
verify_tag_consistency(&tree, 1);
|
||||
verify_tag_consistency(&tree, 2);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue