Skip to content

Commit

Permalink
selftests: cgroup: skip test_cgcore_lesser_ns_open when cgroup2 mount…
Browse files Browse the repository at this point in the history
…ed without nsdelegate

The test case test_cgcore_lesser_ns_open only tasks effect when cgroup2
is mounted with "nsdelegate" mount option. If it misses this option, or
is remounted without "nsdelegate", the test case will fail. For example,
running bpf/test_cgroup_storage first, and then run cgroup/test_core will
fail on test_cgcore_lesser_ns_open. Skip it if "nsdelegate" is not
detected in cgroup2 mount options.

Fixes: bf35a78 ("selftests: cgroup: Test open-time cgroup namespace usage for migration checks")
Signed-off-by: Tianchen Ding <dtcccc@linux.alibaba.com>
Reviewed-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
  • Loading branch information
dtcccc authored and htejun committed Apr 3, 2024
1 parent 20d4628 commit 4793cb5
Show file tree
Hide file tree
Showing 11 changed files with 20 additions and 13 deletions.
8 changes: 5 additions & 3 deletions tools/testing/selftests/cgroup/cgroup_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -195,10 +195,10 @@ int cg_write_numeric(const char *cgroup, const char *control, long value)
return cg_write(cgroup, control, buf);
}

int cg_find_unified_root(char *root, size_t len)
int cg_find_unified_root(char *root, size_t len, bool *nsdelegate)
{
char buf[10 * PAGE_SIZE];
char *fs, *mount, *type;
char *fs, *mount, *type, *options;
const char delim[] = "\n\t ";

if (read_text("/proc/self/mounts", buf, sizeof(buf)) <= 0)
Expand All @@ -211,12 +211,14 @@ int cg_find_unified_root(char *root, size_t len)
for (fs = strtok(buf, delim); fs; fs = strtok(NULL, delim)) {
mount = strtok(NULL, delim);
type = strtok(NULL, delim);
strtok(NULL, delim);
options = strtok(NULL, delim);
strtok(NULL, delim);
strtok(NULL, delim);

if (strcmp(type, "cgroup2") == 0) {
strncpy(root, mount, len);
if (nsdelegate)
*nsdelegate = !!strstr(options, "nsdelegate");
return 0;
}
}
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/cgroup/cgroup_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ static inline int values_close(long a, long b, int err)
return abs(a - b) <= (a + b) / 100 * err;
}

extern int cg_find_unified_root(char *root, size_t len);
extern int cg_find_unified_root(char *root, size_t len, bool *nsdelegate);
extern char *cg_name(const char *root, const char *name);
extern char *cg_name_indexed(const char *root, const char *name, int index);
extern char *cg_control(const char *cgroup, const char *control);
Expand Down
7 changes: 6 additions & 1 deletion tools/testing/selftests/cgroup/test_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
#include "../kselftest.h"
#include "cgroup_util.h"

static bool nsdelegate;

static int touch_anon(char *buf, size_t size)
{
int fd;
Expand Down Expand Up @@ -775,6 +777,9 @@ static int test_cgcore_lesser_ns_open(const char *root)
pid_t pid;
int status;

if (!nsdelegate)
return KSFT_SKIP;

cg_test_a = cg_name(root, "cg_test_a");
cg_test_b = cg_name(root, "cg_test_b");

Expand Down Expand Up @@ -862,7 +867,7 @@ int main(int argc, char *argv[])
char root[PATH_MAX];
int i, ret = EXIT_SUCCESS;

if (cg_find_unified_root(root, sizeof(root)))
if (cg_find_unified_root(root, sizeof(root), &nsdelegate))
ksft_exit_skip("cgroup v2 isn't mounted\n");

if (cg_read_strstr(root, "cgroup.subtree_control", "memory"))
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/cgroup/test_cpu.c
Original file line number Diff line number Diff line change
Expand Up @@ -700,7 +700,7 @@ int main(int argc, char *argv[])
char root[PATH_MAX];
int i, ret = EXIT_SUCCESS;

if (cg_find_unified_root(root, sizeof(root)))
if (cg_find_unified_root(root, sizeof(root), NULL))
ksft_exit_skip("cgroup v2 isn't mounted\n");

if (cg_read_strstr(root, "cgroup.subtree_control", "cpu"))
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/cgroup/test_cpuset.c
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ int main(int argc, char *argv[])
char root[PATH_MAX];
int i, ret = EXIT_SUCCESS;

if (cg_find_unified_root(root, sizeof(root)))
if (cg_find_unified_root(root, sizeof(root), NULL))
ksft_exit_skip("cgroup v2 isn't mounted\n");

if (cg_read_strstr(root, "cgroup.subtree_control", "cpuset"))
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/cgroup/test_freezer.c
Original file line number Diff line number Diff line change
Expand Up @@ -827,7 +827,7 @@ int main(int argc, char *argv[])
char root[PATH_MAX];
int i, ret = EXIT_SUCCESS;

if (cg_find_unified_root(root, sizeof(root)))
if (cg_find_unified_root(root, sizeof(root), NULL))
ksft_exit_skip("cgroup v2 isn't mounted\n");
for (i = 0; i < ARRAY_SIZE(tests); i++) {
switch (tests[i].fn(root)) {
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/cgroup/test_hugetlb_memcg.c
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ int main(int argc, char **argv)
return ret;
}

if (cg_find_unified_root(root, sizeof(root)))
if (cg_find_unified_root(root, sizeof(root), NULL))
ksft_exit_skip("cgroup v2 isn't mounted\n");

switch (test_hugetlb_memcg(root)) {
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/cgroup/test_kill.c
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,7 @@ int main(int argc, char *argv[])
char root[PATH_MAX];
int i, ret = EXIT_SUCCESS;

if (cg_find_unified_root(root, sizeof(root)))
if (cg_find_unified_root(root, sizeof(root), NULL))
ksft_exit_skip("cgroup v2 isn't mounted\n");
for (i = 0; i < ARRAY_SIZE(tests); i++) {
switch (tests[i].fn(root)) {
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/cgroup/test_kmem.c
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,7 @@ int main(int argc, char **argv)
char root[PATH_MAX];
int i, ret = EXIT_SUCCESS;

if (cg_find_unified_root(root, sizeof(root)))
if (cg_find_unified_root(root, sizeof(root), NULL))
ksft_exit_skip("cgroup v2 isn't mounted\n");

/*
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/cgroup/test_memcontrol.c
Original file line number Diff line number Diff line change
Expand Up @@ -1314,7 +1314,7 @@ int main(int argc, char **argv)
char root[PATH_MAX];
int i, proc_status, ret = EXIT_SUCCESS;

if (cg_find_unified_root(root, sizeof(root)))
if (cg_find_unified_root(root, sizeof(root), NULL))
ksft_exit_skip("cgroup v2 isn't mounted\n");

/*
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/cgroup/test_zswap.c
Original file line number Diff line number Diff line change
Expand Up @@ -440,7 +440,7 @@ int main(int argc, char **argv)
char root[PATH_MAX];
int i, ret = EXIT_SUCCESS;

if (cg_find_unified_root(root, sizeof(root)))
if (cg_find_unified_root(root, sizeof(root), NULL))
ksft_exit_skip("cgroup v2 isn't mounted\n");

if (!zswap_configured())
Expand Down

0 comments on commit 4793cb5

Please sign in to comment.