test_maple_tree: testing the cyclic allocation
This tests the interactions of the cyclic allocations, the maple state index and last, and overflow. Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com> Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Link: https://lore.kernel.org/r/170820144894.6328.13052830860966450674.stgit@91.116.238.104.host.secureserver.net Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
9b6713cc75
commit
f92e1a829d
@ -3599,6 +3599,45 @@ static noinline void __init check_state_handling(struct maple_tree *mt)
|
||||
mas_unlock(&mas);
|
||||
}
|
||||
|
||||
static noinline void __init alloc_cyclic_testing(struct maple_tree *mt)
|
||||
{
|
||||
unsigned long location;
|
||||
unsigned long next;
|
||||
int ret = 0;
|
||||
MA_STATE(mas, mt, 0, 0);
|
||||
|
||||
next = 0;
|
||||
mtree_lock(mt);
|
||||
for (int i = 0; i < 100; i++) {
|
||||
mas_alloc_cyclic(&mas, &location, mt, 2, ULONG_MAX, &next, GFP_KERNEL);
|
||||
MAS_BUG_ON(&mas, i != location - 2);
|
||||
MAS_BUG_ON(&mas, mas.index != location);
|
||||
MAS_BUG_ON(&mas, mas.last != location);
|
||||
MAS_BUG_ON(&mas, i != next - 3);
|
||||
}
|
||||
|
||||
mtree_unlock(mt);
|
||||
mtree_destroy(mt);
|
||||
next = 0;
|
||||
mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE);
|
||||
for (int i = 0; i < 100; i++) {
|
||||
mtree_alloc_cyclic(mt, &location, mt, 2, ULONG_MAX, &next, GFP_KERNEL);
|
||||
MT_BUG_ON(mt, i != location - 2);
|
||||
MT_BUG_ON(mt, i != next - 3);
|
||||
MT_BUG_ON(mt, mtree_load(mt, location) != mt);
|
||||
}
|
||||
|
||||
mtree_destroy(mt);
|
||||
/* Overflow test */
|
||||
next = ULONG_MAX - 1;
|
||||
ret = mtree_alloc_cyclic(mt, &location, mt, 2, ULONG_MAX, &next, GFP_KERNEL);
|
||||
MT_BUG_ON(mt, ret != 0);
|
||||
ret = mtree_alloc_cyclic(mt, &location, mt, 2, ULONG_MAX, &next, GFP_KERNEL);
|
||||
MT_BUG_ON(mt, ret != 0);
|
||||
ret = mtree_alloc_cyclic(mt, &location, mt, 2, ULONG_MAX, &next, GFP_KERNEL);
|
||||
MT_BUG_ON(mt, ret != 1);
|
||||
}
|
||||
|
||||
static DEFINE_MTREE(tree);
|
||||
static int __init maple_tree_seed(void)
|
||||
{
|
||||
@ -3880,6 +3919,11 @@ static int __init maple_tree_seed(void)
|
||||
check_state_handling(&tree);
|
||||
mtree_destroy(&tree);
|
||||
|
||||
mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
|
||||
alloc_cyclic_testing(&tree);
|
||||
mtree_destroy(&tree);
|
||||
|
||||
|
||||
#if defined(BENCH)
|
||||
skip:
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user