The commit is pushed to "branch-rh7-3.10.0-229.7.2.vz7.8.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-229.7.2.vz7.8.4 ------> commit 24239bb62335a3c701b2d3538ab5a4f066954ff8 Author: Pavel Tikhomirov <ptikhomi...@virtuozzo.com> Date: Thu Oct 8 14:05:35 2015 +0400
ve/proc: fix mangling cgroup mount source path in container Docker uses /proc/self/cgroup to know where he is in cgroup tree and also it uses /proc/self/mountinfo to get from where cgroup sub-tree(on which he is) is mounted, using both it can understand where his cgroups are in his /sys/fs/cgroup sub-tree. We need to mangle cgroup paths in mountinfo output consistently with cgroup output, in /proc/self/cgroup we remove prefix "/$ctid" do the same in mountinfo. It is not enought to show just "/" for docker in docker: docker will bindmount in container sub-tree of this container. v2: fix compilation https://jira.sw.ru/browse/PSBM-34295 Signed-off-by: Pavel Tikhomirov <ptikhomi...@virtuozzo.com> --- kernel/cgroup.c | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/kernel/cgroup.c b/kernel/cgroup.c index ad61c97..4268373 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c @@ -1375,11 +1375,39 @@ static int cgroup_remount(struct super_block *sb, int *flags, char *data) #ifdef CONFIG_VE int cgroup_show_path(struct seq_file *m, struct dentry *dentry) { - if (!ve_is_super(get_exec_env())) - seq_puts(m, "/"); - else - seq_dentry(m, dentry, " \t\n\\"); - return 0; + char *buf; + size_t size = seq_get_buf(m, &buf); + int res = -1, err = 0; + + if (size) { + char *p = dentry_path(dentry, buf, size); + if (!IS_ERR(p)) { + char *end; + if (!ve_is_super(get_exec_env())) { + while (*++p != '/') { + /* + * Mangle one level when showing + * cgroup mount source in container + * e.g.: "/111" -> "/", + * "/111/test.slice/test.scope" -> + * "/test.slice/test.scope" + */ + if (*p == '\0') { + *--p = '/'; + break; + } + } + } + end = mangle_path(buf, p, " \t\n\\"); + if (end) + res = end - buf; + } else { + err = PTR_ERR(p); + } + } + seq_commit(m, res); + + return err; } #endif _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel