Commit 4793cb59 authored by Tianchen Ding's avatar Tianchen Ding Committed by Tejun Heo

selftests: cgroup: skip test_cgcore_lesser_ns_open when cgroup2 mounted 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: bf35a787 ("selftests: cgroup: Test open-time cgroup namespace usage for migration checks")
Signed-off-by: default avatarTianchen Ding <dtcccc@linux.alibaba.com>
Reviewed-by: default avatarMuhammad Usama Anjum <usama.anjum@collabora.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent 20d46283
...@@ -195,10 +195,10 @@ int cg_write_numeric(const char *cgroup, const char *control, long value) ...@@ -195,10 +195,10 @@ int cg_write_numeric(const char *cgroup, const char *control, long value)
return cg_write(cgroup, control, buf); 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 buf[10 * PAGE_SIZE];
char *fs, *mount, *type; char *fs, *mount, *type, *options;
const char delim[] = "\n\t "; const char delim[] = "\n\t ";
if (read_text("/proc/self/mounts", buf, sizeof(buf)) <= 0) if (read_text("/proc/self/mounts", buf, sizeof(buf)) <= 0)
...@@ -211,12 +211,14 @@ int cg_find_unified_root(char *root, size_t len) ...@@ -211,12 +211,14 @@ int cg_find_unified_root(char *root, size_t len)
for (fs = strtok(buf, delim); fs; fs = strtok(NULL, delim)) { for (fs = strtok(buf, delim); fs; fs = strtok(NULL, delim)) {
mount = strtok(NULL, delim); mount = strtok(NULL, delim);
type = strtok(NULL, delim); type = strtok(NULL, delim);
strtok(NULL, delim); options = strtok(NULL, delim);
strtok(NULL, delim); strtok(NULL, delim);
strtok(NULL, delim); strtok(NULL, delim);
if (strcmp(type, "cgroup2") == 0) { if (strcmp(type, "cgroup2") == 0) {
strncpy(root, mount, len); strncpy(root, mount, len);
if (nsdelegate)
*nsdelegate = !!strstr(options, "nsdelegate");
return 0; return 0;
} }
} }
......
...@@ -21,7 +21,7 @@ static inline int values_close(long a, long b, int err) ...@@ -21,7 +21,7 @@ static inline int values_close(long a, long b, int err)
return abs(a - b) <= (a + b) / 100 * 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(const char *root, const char *name);
extern char *cg_name_indexed(const char *root, const char *name, int index); extern char *cg_name_indexed(const char *root, const char *name, int index);
extern char *cg_control(const char *cgroup, const char *control); extern char *cg_control(const char *cgroup, const char *control);
......
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
#include "../kselftest.h" #include "../kselftest.h"
#include "cgroup_util.h" #include "cgroup_util.h"
static bool nsdelegate;
static int touch_anon(char *buf, size_t size) static int touch_anon(char *buf, size_t size)
{ {
int fd; int fd;
...@@ -775,6 +777,9 @@ static int test_cgcore_lesser_ns_open(const char *root) ...@@ -775,6 +777,9 @@ static int test_cgcore_lesser_ns_open(const char *root)
pid_t pid; pid_t pid;
int status; int status;
if (!nsdelegate)
return KSFT_SKIP;
cg_test_a = cg_name(root, "cg_test_a"); cg_test_a = cg_name(root, "cg_test_a");
cg_test_b = cg_name(root, "cg_test_b"); cg_test_b = cg_name(root, "cg_test_b");
...@@ -862,7 +867,7 @@ int main(int argc, char *argv[]) ...@@ -862,7 +867,7 @@ int main(int argc, char *argv[])
char root[PATH_MAX]; char root[PATH_MAX];
int i, ret = EXIT_SUCCESS; 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"); ksft_exit_skip("cgroup v2 isn't mounted\n");
if (cg_read_strstr(root, "cgroup.subtree_control", "memory")) if (cg_read_strstr(root, "cgroup.subtree_control", "memory"))
......
...@@ -700,7 +700,7 @@ int main(int argc, char *argv[]) ...@@ -700,7 +700,7 @@ int main(int argc, char *argv[])
char root[PATH_MAX]; char root[PATH_MAX];
int i, ret = EXIT_SUCCESS; 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"); ksft_exit_skip("cgroup v2 isn't mounted\n");
if (cg_read_strstr(root, "cgroup.subtree_control", "cpu")) if (cg_read_strstr(root, "cgroup.subtree_control", "cpu"))
......
...@@ -249,7 +249,7 @@ int main(int argc, char *argv[]) ...@@ -249,7 +249,7 @@ int main(int argc, char *argv[])
char root[PATH_MAX]; char root[PATH_MAX];
int i, ret = EXIT_SUCCESS; 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"); ksft_exit_skip("cgroup v2 isn't mounted\n");
if (cg_read_strstr(root, "cgroup.subtree_control", "cpuset")) if (cg_read_strstr(root, "cgroup.subtree_control", "cpuset"))
......
...@@ -827,7 +827,7 @@ int main(int argc, char *argv[]) ...@@ -827,7 +827,7 @@ int main(int argc, char *argv[])
char root[PATH_MAX]; char root[PATH_MAX];
int i, ret = EXIT_SUCCESS; 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"); ksft_exit_skip("cgroup v2 isn't mounted\n");
for (i = 0; i < ARRAY_SIZE(tests); i++) { for (i = 0; i < ARRAY_SIZE(tests); i++) {
switch (tests[i].fn(root)) { switch (tests[i].fn(root)) {
......
...@@ -214,7 +214,7 @@ int main(int argc, char **argv) ...@@ -214,7 +214,7 @@ int main(int argc, char **argv)
return ret; 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"); ksft_exit_skip("cgroup v2 isn't mounted\n");
switch (test_hugetlb_memcg(root)) { switch (test_hugetlb_memcg(root)) {
......
...@@ -276,7 +276,7 @@ int main(int argc, char *argv[]) ...@@ -276,7 +276,7 @@ int main(int argc, char *argv[])
char root[PATH_MAX]; char root[PATH_MAX];
int i, ret = EXIT_SUCCESS; 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"); ksft_exit_skip("cgroup v2 isn't mounted\n");
for (i = 0; i < ARRAY_SIZE(tests); i++) { for (i = 0; i < ARRAY_SIZE(tests); i++) {
switch (tests[i].fn(root)) { switch (tests[i].fn(root)) {
......
...@@ -420,7 +420,7 @@ int main(int argc, char **argv) ...@@ -420,7 +420,7 @@ int main(int argc, char **argv)
char root[PATH_MAX]; char root[PATH_MAX];
int i, ret = EXIT_SUCCESS; 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"); ksft_exit_skip("cgroup v2 isn't mounted\n");
/* /*
......
...@@ -1314,7 +1314,7 @@ int main(int argc, char **argv) ...@@ -1314,7 +1314,7 @@ int main(int argc, char **argv)
char root[PATH_MAX]; char root[PATH_MAX];
int i, proc_status, ret = EXIT_SUCCESS; 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"); ksft_exit_skip("cgroup v2 isn't mounted\n");
/* /*
......
...@@ -440,7 +440,7 @@ int main(int argc, char **argv) ...@@ -440,7 +440,7 @@ int main(int argc, char **argv)
char root[PATH_MAX]; char root[PATH_MAX];
int i, ret = EXIT_SUCCESS; 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"); ksft_exit_skip("cgroup v2 isn't mounted\n");
if (!zswap_configured()) if (!zswap_configured())
......
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