diff options
author | Matthew Wilcox <willy@linux.intel.com> | 2016-05-20 20:03:16 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-05-20 20:58:30 -0400 |
commit | 0694f0c9e20c47063e4237e5f6649ae5ce5a369a (patch) | |
tree | f7b6e177ecd1ef09d61f374200837e1b233bea94 | |
parent | fb209019c92a9141fd73f3c4928edc1b299b3490 (diff) |
radix tree test suite: remove dependencies on height
verify_node() can use node->shift instead of the height.
tree_verify_min_height() can be converted over to using node_maxindex()
and shift_maxindex() instead of radix_tree_maxindex().
Signed-off-by: Matthew Wilcox <willy@linux.intel.com>
Cc: Konstantin Khlebnikov <koct9i@gmail.com>
Cc: Kirill Shutemov <kirill.shutemov@linux.intel.com>
Cc: Jan Kara <jack@suse.com>
Cc: Neil Brown <neilb@suse.de>
Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | tools/testing/radix-tree/test.c | 34 | ||||
-rw-r--r-- | tools/testing/radix-tree/test.h | 3 |
2 files changed, 25 insertions, 12 deletions
diff --git a/tools/testing/radix-tree/test.c b/tools/testing/radix-tree/test.c index da54f11e8ba7..3004c58b9021 100644 --- a/tools/testing/radix-tree/test.c +++ b/tools/testing/radix-tree/test.c | |||
@@ -143,7 +143,7 @@ void item_full_scan(struct radix_tree_root *root, unsigned long start, | |||
143 | } | 143 | } |
144 | 144 | ||
145 | static int verify_node(struct radix_tree_node *slot, unsigned int tag, | 145 | static int verify_node(struct radix_tree_node *slot, unsigned int tag, |
146 | unsigned int height, int tagged) | 146 | int tagged) |
147 | { | 147 | { |
148 | int anyset = 0; | 148 | int anyset = 0; |
149 | int i; | 149 | int i; |
@@ -159,7 +159,8 @@ static int verify_node(struct radix_tree_node *slot, unsigned int tag, | |||
159 | } | 159 | } |
160 | } | 160 | } |
161 | if (tagged != anyset) { | 161 | if (tagged != anyset) { |
162 | printf("tag: %u, height %u, tagged: %d, anyset: %d\n", tag, height, tagged, anyset); | 162 | printf("tag: %u, shift %u, tagged: %d, anyset: %d\n", |
163 | tag, slot->shift, tagged, anyset); | ||
163 | for (j = 0; j < RADIX_TREE_MAX_TAGS; j++) { | 164 | for (j = 0; j < RADIX_TREE_MAX_TAGS; j++) { |
164 | printf("tag %d: ", j); | 165 | printf("tag %d: ", j); |
165 | for (i = 0; i < RADIX_TREE_TAG_LONGS; i++) | 166 | for (i = 0; i < RADIX_TREE_TAG_LONGS; i++) |
@@ -171,10 +172,10 @@ static int verify_node(struct radix_tree_node *slot, unsigned int tag, | |||
171 | assert(tagged == anyset); | 172 | assert(tagged == anyset); |
172 | 173 | ||
173 | /* Go for next level */ | 174 | /* Go for next level */ |
174 | if (height > 1) { | 175 | if (slot->shift > 0) { |
175 | for (i = 0; i < RADIX_TREE_MAP_SIZE; i++) | 176 | for (i = 0; i < RADIX_TREE_MAP_SIZE; i++) |
176 | if (slot->slots[i]) | 177 | if (slot->slots[i]) |
177 | if (verify_node(slot->slots[i], tag, height - 1, | 178 | if (verify_node(slot->slots[i], tag, |
178 | !!test_bit(i, slot->tags[tag]))) { | 179 | !!test_bit(i, slot->tags[tag]))) { |
179 | printf("Failure at off %d\n", i); | 180 | printf("Failure at off %d\n", i); |
180 | for (j = 0; j < RADIX_TREE_MAX_TAGS; j++) { | 181 | for (j = 0; j < RADIX_TREE_MAX_TAGS; j++) { |
@@ -191,9 +192,10 @@ static int verify_node(struct radix_tree_node *slot, unsigned int tag, | |||
191 | 192 | ||
192 | void verify_tag_consistency(struct radix_tree_root *root, unsigned int tag) | 193 | void verify_tag_consistency(struct radix_tree_root *root, unsigned int tag) |
193 | { | 194 | { |
194 | if (!root->height) | 195 | struct radix_tree_node *node = root->rnode; |
196 | if (!radix_tree_is_indirect_ptr(node)) | ||
195 | return; | 197 | return; |
196 | verify_node(root->rnode, tag, root->height, !!root_tag_get(root, tag)); | 198 | verify_node(node, tag, !!root_tag_get(root, tag)); |
197 | } | 199 | } |
198 | 200 | ||
199 | void item_kill_tree(struct radix_tree_root *root) | 201 | void item_kill_tree(struct radix_tree_root *root) |
@@ -218,9 +220,19 @@ void item_kill_tree(struct radix_tree_root *root) | |||
218 | 220 | ||
219 | void tree_verify_min_height(struct radix_tree_root *root, int maxindex) | 221 | void tree_verify_min_height(struct radix_tree_root *root, int maxindex) |
220 | { | 222 | { |
221 | assert(radix_tree_maxindex(root->height) >= maxindex); | 223 | unsigned shift; |
222 | if (root->height > 1) | 224 | struct radix_tree_node *node = root->rnode; |
223 | assert(radix_tree_maxindex(root->height-1) < maxindex); | 225 | if (!radix_tree_is_indirect_ptr(node)) { |
224 | else if (root->height == 1) | 226 | assert(maxindex == 0); |
225 | assert(radix_tree_maxindex(root->height-1) <= maxindex); | 227 | return; |
228 | } | ||
229 | |||
230 | node = indirect_to_ptr(node); | ||
231 | assert(maxindex <= node_maxindex(node)); | ||
232 | |||
233 | shift = node->shift; | ||
234 | if (shift > 0) | ||
235 | assert(maxindex > shift_maxindex(shift - RADIX_TREE_MAP_SHIFT)); | ||
236 | else | ||
237 | assert(maxindex > 0); | ||
226 | } | 238 | } |
diff --git a/tools/testing/radix-tree/test.h b/tools/testing/radix-tree/test.h index 67217c93fe95..866c8c676aa4 100644 --- a/tools/testing/radix-tree/test.h +++ b/tools/testing/radix-tree/test.h | |||
@@ -42,4 +42,5 @@ extern int nr_allocated; | |||
42 | void *indirect_to_ptr(void *ptr); | 42 | void *indirect_to_ptr(void *ptr); |
43 | void radix_tree_dump(struct radix_tree_root *root); | 43 | void radix_tree_dump(struct radix_tree_root *root); |
44 | int root_tag_get(struct radix_tree_root *root, unsigned int tag); | 44 | int root_tag_get(struct radix_tree_root *root, unsigned int tag); |
45 | unsigned long radix_tree_maxindex(unsigned int height); | 45 | unsigned long node_maxindex(struct radix_tree_node *); |
46 | unsigned long shift_maxindex(unsigned int shift); | ||