Commit 44e9d308 authored by Roman Gushchin's avatar Roman Gushchin Committed by Tejun Heo

kselftests: cgroup: add freezer mkdir test

Add a new cgroup freezer selftest, which checks that if a cgroup is
frozen, their new child cgroups will properly inherit the frozen
state.

It creates a parent cgroup, freezes it, creates a child cgroup
and populates it with a dummy process. Then it checks that both
parent and child cgroup are frozen.
Signed-off-by: default avatarRoman Gushchin <guro@fb.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: Shuah Khan <shuah@kernel.org>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent 505a8ec7
...@@ -447,6 +447,59 @@ static int test_cgfreezer_forkbomb(const char *root) ...@@ -447,6 +447,59 @@ static int test_cgfreezer_forkbomb(const char *root)
return ret; return ret;
} }
/*
* The test creates a cgroups and freezes it. Then it creates a child cgroup
* and populates it with a task. After that it checks that the child cgroup
* is frozen and the parent cgroup remains frozen too.
*/
static int test_cgfreezer_mkdir(const char *root)
{
int ret = KSFT_FAIL;
char *parent, *child = NULL;
int pid;
parent = cg_name(root, "cg_test_mkdir_A");
if (!parent)
goto cleanup;
child = cg_name(parent, "cg_test_mkdir_B");
if (!child)
goto cleanup;
if (cg_create(parent))
goto cleanup;
if (cg_freeze_wait(parent, true))
goto cleanup;
if (cg_create(child))
goto cleanup;
pid = cg_run_nowait(child, child_fn, NULL);
if (pid < 0)
goto cleanup;
if (cg_wait_for_proc_count(child, 1))
goto cleanup;
if (cg_check_frozen(child, true))
goto cleanup;
if (cg_check_frozen(parent, true))
goto cleanup;
ret = KSFT_PASS;
cleanup:
if (child)
cg_destroy(child);
free(child);
if (parent)
cg_destroy(parent);
free(parent);
return ret;
}
/* /*
* The test creates two nested cgroups, freezes the parent * The test creates two nested cgroups, freezes the parent
* and removes the child. Then it checks that the parent cgroup * and removes the child. Then it checks that the parent cgroup
...@@ -815,6 +868,7 @@ struct cgfreezer_test { ...@@ -815,6 +868,7 @@ struct cgfreezer_test {
T(test_cgfreezer_simple), T(test_cgfreezer_simple),
T(test_cgfreezer_tree), T(test_cgfreezer_tree),
T(test_cgfreezer_forkbomb), T(test_cgfreezer_forkbomb),
T(test_cgfreezer_mkdir),
T(test_cgfreezer_rmdir), T(test_cgfreezer_rmdir),
T(test_cgfreezer_migrate), T(test_cgfreezer_migrate),
T(test_cgfreezer_ptrace), T(test_cgfreezer_ptrace),
......
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