On 3/27/24 7:44 AM, Tianchen Ding wrote: > 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: bf35a7879f1d ("selftests: cgroup: Test open-time cgroup namespace usage for migration checks") > Signed-off-by: Tianchen Ding <dtcccc@xxxxxxxxxxxxxxxxx> Reviewed-by: Muhammad Usama Anjum <usama.anjum@xxxxxxxxxxxxx> > --- > tools/testing/selftests/cgroup/cgroup_util.c | 8 +++++--- > tools/testing/selftests/cgroup/cgroup_util.h | 2 +- > tools/testing/selftests/cgroup/test_core.c | 7 ++++++- > tools/testing/selftests/cgroup/test_cpu.c | 2 +- > tools/testing/selftests/cgroup/test_cpuset.c | 2 +- > tools/testing/selftests/cgroup/test_freezer.c | 2 +- > tools/testing/selftests/cgroup/test_hugetlb_memcg.c | 2 +- > tools/testing/selftests/cgroup/test_kill.c | 2 +- > tools/testing/selftests/cgroup/test_kmem.c | 2 +- > tools/testing/selftests/cgroup/test_memcontrol.c | 2 +- > tools/testing/selftests/cgroup/test_zswap.c | 2 +- > 11 files changed, 20 insertions(+), 13 deletions(-) > > diff --git a/tools/testing/selftests/cgroup/cgroup_util.c b/tools/testing/selftests/cgroup/cgroup_util.c > index 0340d4ca8f51..432db923bced 100644 > --- a/tools/testing/selftests/cgroup/cgroup_util.c > +++ b/tools/testing/selftests/cgroup/cgroup_util.c > @@ -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) > @@ -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; > } > } > diff --git a/tools/testing/selftests/cgroup/cgroup_util.h b/tools/testing/selftests/cgroup/cgroup_util.h > index 1df7f202214a..89e8519fb271 100644 > --- a/tools/testing/selftests/cgroup/cgroup_util.h > +++ b/tools/testing/selftests/cgroup/cgroup_util.h > @@ -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); > diff --git a/tools/testing/selftests/cgroup/test_core.c b/tools/testing/selftests/cgroup/test_core.c > index 80aa6b2373b9..a5672a91d273 100644 > --- a/tools/testing/selftests/cgroup/test_core.c > +++ b/tools/testing/selftests/cgroup/test_core.c > @@ -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; > @@ -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"); > > @@ -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")) > diff --git a/tools/testing/selftests/cgroup/test_cpu.c b/tools/testing/selftests/cgroup/test_cpu.c > index 24020a2c68dc..186bf96f6a28 100644 > --- a/tools/testing/selftests/cgroup/test_cpu.c > +++ b/tools/testing/selftests/cgroup/test_cpu.c > @@ -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")) > diff --git a/tools/testing/selftests/cgroup/test_cpuset.c b/tools/testing/selftests/cgroup/test_cpuset.c > index b061ed1e05b4..4034d14ba69a 100644 > --- a/tools/testing/selftests/cgroup/test_cpuset.c > +++ b/tools/testing/selftests/cgroup/test_cpuset.c > @@ -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")) > diff --git a/tools/testing/selftests/cgroup/test_freezer.c b/tools/testing/selftests/cgroup/test_freezer.c > index 8845353aca53..8730645d363a 100644 > --- a/tools/testing/selftests/cgroup/test_freezer.c > +++ b/tools/testing/selftests/cgroup/test_freezer.c > @@ -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)) { > diff --git a/tools/testing/selftests/cgroup/test_hugetlb_memcg.c b/tools/testing/selftests/cgroup/test_hugetlb_memcg.c > index f0fefeb4cc24..856f9508ea56 100644 > --- a/tools/testing/selftests/cgroup/test_hugetlb_memcg.c > +++ b/tools/testing/selftests/cgroup/test_hugetlb_memcg.c > @@ -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)) { > diff --git a/tools/testing/selftests/cgroup/test_kill.c b/tools/testing/selftests/cgroup/test_kill.c > index 6153690319c9..0e5bb6c7307a 100644 > --- a/tools/testing/selftests/cgroup/test_kill.c > +++ b/tools/testing/selftests/cgroup/test_kill.c > @@ -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)) { > diff --git a/tools/testing/selftests/cgroup/test_kmem.c b/tools/testing/selftests/cgroup/test_kmem.c > index c82f974b85c9..137506db0312 100644 > --- a/tools/testing/selftests/cgroup/test_kmem.c > +++ b/tools/testing/selftests/cgroup/test_kmem.c > @@ -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"); > > /* > diff --git a/tools/testing/selftests/cgroup/test_memcontrol.c b/tools/testing/selftests/cgroup/test_memcontrol.c > index c7c9572003a8..b462416b3806 100644 > --- a/tools/testing/selftests/cgroup/test_memcontrol.c > +++ b/tools/testing/selftests/cgroup/test_memcontrol.c > @@ -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"); > > /* > diff --git a/tools/testing/selftests/cgroup/test_zswap.c b/tools/testing/selftests/cgroup/test_zswap.c > index f0e488ed90d8..ef7f39545317 100644 > --- a/tools/testing/selftests/cgroup/test_zswap.c > +++ b/tools/testing/selftests/cgroup/test_zswap.c > @@ -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()) -- BR, Muhammad Usama Anjum