The commit is pushed to "branch-rh7-3.10.0-229.7.2.vz7.9.x-ovz" and will appear
at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-229.7.2.vz7.9.20
------>
commit 1867565c8c6df8c2a18e391d9e6d721cf29e251e
Author: Stanislav Kinsburskiy <[email protected]>
Date: Thu Jan 14 17:04:43 2016 +0400
ve/cgroup: add VE mark to each user cgroup name on mount
Cgroups have global list of roots, which leads to cgroups transparency for
all
CTs.
The simpliest way is to mark cgroup root with ve pointer and use it as a
pair
to cgroup name to test superblock on mount.
https://jira.sw.ru/browse/PSBM-42573
Signed-off-by: Stanislav Kinsburskiy <[email protected]>
Reviewed-by: Vladimir Davydov <[email protected]>
---
include/linux/cgroup.h | 7 ++++++-
kernel/cgroup.c | 15 ++++++++++++---
2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
index ed5e6ac..b59e122 100644
--- a/include/linux/cgroup.h
+++ b/include/linux/cgroup.h
@@ -301,7 +301,9 @@ enum {
CGRP_ROOT_NOPREFIX = (1 << 1), /* mounted subsystems have no named
prefix */
CGRP_ROOT_XATTR = (1 << 2), /* supports extended attributes */
};
-
+#ifdef CONFIG_VE
+struct ve_struct;
+#endif
/*
* A cgroupfs_root represents the root of a cgroup hierarchy, and may be
* associated with a superblock to form an active hierarchy. This is
@@ -348,6 +350,9 @@ struct cgroupfs_root {
/* The name for this hierarchy - may be empty */
char name[MAX_CGROUP_ROOT_NAMELEN];
+#ifdef CONFIG_VE
+ struct ve_struct *ve;
+#endif
};
/*
diff --git a/kernel/cgroup.c b/kernel/cgroup.c
index 4268373..a80b8bf 100644
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
@@ -1479,7 +1479,10 @@ static int cgroup_test_super(struct super_block *sb,
void *data)
{
struct cgroup_sb_opts *opts = data;
struct cgroupfs_root *root = sb->s_fs_info;
-
+#ifdef CONFIG_VE
+ if (get_exec_env() != root->ve)
+ return 0;
+#endif
/* If we asked for a name then it must match */
if (opts->name && strcmp(opts->name, root->name))
return 0;
@@ -1666,12 +1669,18 @@ static struct dentry *cgroup_mount(struct
file_system_type *fs_type,
mutex_lock(&inode->i_mutex);
mutex_lock(&cgroup_mutex);
mutex_lock(&cgroup_root_mutex);
-
+#ifdef CONFIG_VE
+ root->ve = get_exec_env();
+#endif
/* Check for name clashes with existing mounts */
ret = -EBUSY;
if (strlen(root->name))
for_each_active_root(existing_root)
- if (!strcmp(existing_root->name, root->name))
+ if (!strcmp(existing_root->name, root->name)
+#ifdef CONFIG_VE
+ && (root->ve == existing_root->ve)
+#endif
+ )
goto unlock_drop;
/*
_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel