mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 01:53:29 +02:00
selftests/namespaces: third listns() test
Test listns() pagination. List namespaces in batches. Link: https://patch.msgid.link/20251029-work-namespace-nstree-listns-v4-41-2e6f823ebdc0@kernel.org Tested-by: syzbot@syzkaller.appspotmail.com Reviewed-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
6a68c7f919
commit
46909d1343
|
|
@ -115,4 +115,57 @@ TEST(listns_filter_by_type)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Test listns() pagination.
|
||||
* List namespaces in batches.
|
||||
*/
|
||||
TEST(listns_pagination)
|
||||
{
|
||||
struct ns_id_req req = {
|
||||
.size = sizeof(req),
|
||||
.spare = 0,
|
||||
.ns_id = 0,
|
||||
.ns_type = 0,
|
||||
.spare2 = 0,
|
||||
.user_ns_id = 0,
|
||||
};
|
||||
__u64 batch1[2], batch2[2];
|
||||
ssize_t ret1, ret2;
|
||||
|
||||
/* Get first batch */
|
||||
ret1 = sys_listns(&req, batch1, ARRAY_SIZE(batch1), 0);
|
||||
if (ret1 < 0) {
|
||||
if (errno == ENOSYS)
|
||||
SKIP(return, "listns() not supported");
|
||||
TH_LOG("listns failed: %s (errno=%d)", strerror(errno), errno);
|
||||
ASSERT_TRUE(false);
|
||||
}
|
||||
ASSERT_GE(ret1, 0);
|
||||
|
||||
if (ret1 == 0)
|
||||
SKIP(return, "No namespaces found");
|
||||
|
||||
TH_LOG("First batch: %zd namespaces", ret1);
|
||||
|
||||
/* Get second batch using last ID from first batch */
|
||||
if (ret1 == ARRAY_SIZE(batch1)) {
|
||||
req.ns_id = batch1[ret1 - 1];
|
||||
ret2 = sys_listns(&req, batch2, ARRAY_SIZE(batch2), 0);
|
||||
ASSERT_GE(ret2, 0);
|
||||
|
||||
TH_LOG("Second batch: %zd namespaces (after ns_id=%llu)",
|
||||
ret2, (unsigned long long)req.ns_id);
|
||||
|
||||
/* If we got more results, verify IDs are monotonically increasing */
|
||||
if (ret2 > 0) {
|
||||
ASSERT_GT(batch2[0], batch1[ret1 - 1]);
|
||||
TH_LOG("Pagination working: %llu > %llu",
|
||||
(unsigned long long)batch2[0],
|
||||
(unsigned long long)batch1[ret1 - 1]);
|
||||
}
|
||||
} else {
|
||||
TH_LOG("All namespaces fit in first batch");
|
||||
}
|
||||
}
|
||||
|
||||
TEST_HARNESS_MAIN
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user