forked from Minki/linux
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: Roman Gushchin <guro@fb.com> Cc: Tejun Heo <tj@kernel.org> Cc: Shuah Khan <shuah@kernel.org> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
505a8ec7e1
commit
44e9d308a5
@ -447,6 +447,59 @@ cleanup:
|
||||
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
|
||||
* and removes the child. Then it checks that the parent cgroup
|
||||
@ -815,6 +868,7 @@ struct cgfreezer_test {
|
||||
T(test_cgfreezer_simple),
|
||||
T(test_cgfreezer_tree),
|
||||
T(test_cgfreezer_forkbomb),
|
||||
T(test_cgfreezer_mkdir),
|
||||
T(test_cgfreezer_rmdir),
|
||||
T(test_cgfreezer_migrate),
|
||||
T(test_cgfreezer_ptrace),
|
||||
|
Loading…
Reference in New Issue
Block a user