Commit 4f145cd6 authored by Matthew Wilcox's avatar Matthew Wilcox

XArray tests: Check iterating over multiorder entries

There was no bug here, but there was no test coverage for this scenario.
Signed-off-by: default avatarMatthew Wilcox <willy@infradead.org>
parent b7677a13
...@@ -476,6 +476,32 @@ static noinline void check_multi_store_2(struct xarray *xa, unsigned long index, ...@@ -476,6 +476,32 @@ static noinline void check_multi_store_2(struct xarray *xa, unsigned long index,
xas_unlock(&xas); xas_unlock(&xas);
XA_BUG_ON(xa, !xa_empty(xa)); XA_BUG_ON(xa, !xa_empty(xa));
} }
static noinline void check_multi_store_3(struct xarray *xa, unsigned long index,
unsigned int order)
{
XA_STATE(xas, xa, 0);
void *entry;
int n = 0;
xa_store_order(xa, index, order, xa_mk_index(index), GFP_KERNEL);
xas_lock(&xas);
xas_for_each(&xas, entry, ULONG_MAX) {
XA_BUG_ON(xa, entry != xa_mk_index(index));
n++;
}
XA_BUG_ON(xa, n != 1);
xas_set(&xas, index + 1);
xas_for_each(&xas, entry, ULONG_MAX) {
XA_BUG_ON(xa, entry != xa_mk_index(index));
n++;
}
XA_BUG_ON(xa, n != 2);
xas_unlock(&xas);
xa_destroy(xa);
}
#endif #endif
static noinline void check_multi_store(struct xarray *xa) static noinline void check_multi_store(struct xarray *xa)
...@@ -550,6 +576,11 @@ static noinline void check_multi_store(struct xarray *xa) ...@@ -550,6 +576,11 @@ static noinline void check_multi_store(struct xarray *xa)
check_multi_store_1(xa, (1UL << i) + 1, i); check_multi_store_1(xa, (1UL << i) + 1, i);
} }
check_multi_store_2(xa, 4095, 9); check_multi_store_2(xa, 4095, 9);
for (i = 1; i < 20; i++) {
check_multi_store_3(xa, 0, i);
check_multi_store_3(xa, 1UL << i, i);
}
#endif #endif
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment