We have single pids cgroup hierarchy which is shared among all VEs. So when we start several VEs, cgroup_add_ve_root_files() will be called more than once for the single pids cgroup, leading to: "cgroup_add_ve_root_files: failed to add cgroup.subgroups_limit, err=-17"
This may seem as harmless message at first, but it is not because cgroup_add_file() doesn't handle error properly: cfe = kzalloc(sizeof(*cfe), GFP_KERNEL); .... dentry->d_fsdata = cfe; .... error = cgroup_create_file(dentry, mode | S_IFREG, cgrp->root->sb); if (!error) { list_add_tail(&cfe->node, &parent->files); cfe = NULL; } .... kfree(cfe); return error; As one can see above we leave freed cfe in dentry if cgroup_create_file() fails. So let's make sure that we call cgroup_add_ve_root_files() only once per cgroup to avoid that problem and message in dmesg as well. https://jira.sw.ru/browse/PSBM-59693 Signed-off-by: Andrey Ryabinin <aryabi...@virtuozzo.com> --- kernel/cgroup.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 3e2de0b4..e8ec5f2 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c @@ -4271,8 +4271,8 @@ void cgroup_mark_ve_root(struct ve_struct *ve) mutex_lock(&cgroup_mutex); for_each_active_root(root) { cgrp = task_cgroup_from_root(ve->init_task, root); - set_bit(CGRP_VE_ROOT, &cgrp->flags); - cgroup_add_ve_root_files(cgrp, NULL, files); + if (!test_and_set_bit(CGRP_VE_ROOT, &cgrp->flags)) + cgroup_add_ve_root_files(cgrp, NULL, files); } mutex_unlock(&cgroup_mutex); } -- 2.10.2 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel