UPSTREAM: cgroup: Add named hierarchy disabling to cgroup_no_v1 boot param
It can be useful to inhibit all cgroup1 hierarchies especially during transition and for debugging. cgroup_no_v1 can block hierarchies with controllers which leaves out the named hierarchies. Expand it to cover the named hierarchies so that "cgroup_no_v1=all,named" disables all cgroup1 hierarchies. Signed-off-by: Tejun Heo <tj@kernel.org> Suggested-by: Marcin Pawlowski <mpawlowski@fb.com> Signed-off-by: Tejun Heo <tj@kernel.org> Change-Id: Ibd093dd9b70d15402a21db3c1ef56005ebc7f99e (cherry picked from commit 3fc9c12d27b4ded4f1f761a800558dab2e6bbac5) Bug: 154548692 Signed-off-by: Marco Ballesio <balejs@google.com>
This commit is contained in:
parent
0d53c30064
commit
ce5f91bdfa
2 changed files with 19 additions and 3 deletions
|
@ -490,10 +490,14 @@
|
||||||
cut the overhead, others just disable the usage. So
|
cut the overhead, others just disable the usage. So
|
||||||
only cgroup_disable=memory is actually worthy}
|
only cgroup_disable=memory is actually worthy}
|
||||||
|
|
||||||
cgroup_no_v1= [KNL] Disable one, multiple, all cgroup controllers in v1
|
cgroup_no_v1= [KNL] Disable cgroup controllers and named hierarchies in v1
|
||||||
Format: { controller[,controller...] | "all" }
|
Format: { { controller | "all" | "named" }
|
||||||
|
[,{ controller | "all" | "named" }...] }
|
||||||
Like cgroup_disable, but only applies to cgroup v1;
|
Like cgroup_disable, but only applies to cgroup v1;
|
||||||
the blacklisted controllers remain available in cgroup2.
|
the blacklisted controllers remain available in cgroup2.
|
||||||
|
"all" blacklists all controllers and "named" disables
|
||||||
|
named mounts. Specifying both "all" and "named" disables
|
||||||
|
all v1 hierarchies.
|
||||||
|
|
||||||
cgroup.memory= [KNL] Pass options to the cgroup memory controller.
|
cgroup.memory= [KNL] Pass options to the cgroup memory controller.
|
||||||
Format: <string>
|
Format: <string>
|
||||||
|
|
|
@ -27,6 +27,9 @@
|
||||||
/* Controllers blocked by the commandline in v1 */
|
/* Controllers blocked by the commandline in v1 */
|
||||||
static u16 cgroup_no_v1_mask;
|
static u16 cgroup_no_v1_mask;
|
||||||
|
|
||||||
|
/* disable named v1 mounts */
|
||||||
|
static bool cgroup_no_v1_named;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* pidlist destructions need to be flushed on cgroup destruction. Use a
|
* pidlist destructions need to be flushed on cgroup destruction. Use a
|
||||||
* separate workqueue as flush domain.
|
* separate workqueue as flush domain.
|
||||||
|
@ -965,6 +968,10 @@ static int parse_cgroupfs_options(char *data, struct cgroup_sb_opts *opts)
|
||||||
}
|
}
|
||||||
if (!strncmp(token, "name=", 5)) {
|
if (!strncmp(token, "name=", 5)) {
|
||||||
const char *name = token + 5;
|
const char *name = token + 5;
|
||||||
|
|
||||||
|
/* blocked by boot param? */
|
||||||
|
if (cgroup_no_v1_named)
|
||||||
|
return -ENOENT;
|
||||||
/* Can't specify an empty name */
|
/* Can't specify an empty name */
|
||||||
if (!strlen(name))
|
if (!strlen(name))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -1294,7 +1301,12 @@ static int __init cgroup_no_v1(char *str)
|
||||||
|
|
||||||
if (!strcmp(token, "all")) {
|
if (!strcmp(token, "all")) {
|
||||||
cgroup_no_v1_mask = U16_MAX;
|
cgroup_no_v1_mask = U16_MAX;
|
||||||
break;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strcmp(token, "named")) {
|
||||||
|
cgroup_no_v1_named = true;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
for_each_subsys(ss, i) {
|
for_each_subsys(ss, i) {
|
||||||
|
|
Loading…
Reference in a new issue