mirror of
https://github.com/torvalds/linux.git
synced 2026-06-03 20:14:06 +02:00
cgroup: Add compatibility option for content of /proc/cgroups
/proc/cgroups lists only v1 controllers by default, however, this is only enforced since the commitaf000ce852("cgroup: Do not report unavailable v1 controllers in /proc/cgroups") and there is software in the wild that uses content of /proc/cgroups to decide on availability of v2 (sic) controllers. Add a boottime param that can bring back the previous behavior for setups where the check in the software cannot be changed and it causes e.g. unintended OOMs. Also, this patch takes out cgrp_v1_visible from cgroup1_subsys_absent() guard since it's only important to check which hierarchy (v1 vs v2) the subsys is attached to. This has no effect on the printed message but the code is cleaner since cgrp_v1_visible is really about mounted hierarchies, not the content of /proc/cgroups. Link: https://lore.kernel.org/r/b26b60b7d0d2a5ecfd2f3c45f95f32922ed24686.camel@decadent.org.uk Fixes:af000ce852("cgroup: Do not report unavailable v1 controllers in /proc/cgroups") Fixes:a0ab145322("cgroup: Print message when /proc/cgroups is read on v2-only system") Signed-off-by: Michal Koutný <mkoutny@suse.com> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
954bacce36
commit
646faf36d7
|
|
@ -630,6 +630,14 @@
|
|||
named mounts. Specifying both "all" and "named" disables
|
||||
all v1 hierarchies.
|
||||
|
||||
cgroup_v1_proc= [KNL] Show also missing controllers in /proc/cgroups
|
||||
Format: { "true" | "false" }
|
||||
/proc/cgroups lists only v1 controllers by default.
|
||||
This compatibility option enables listing also v2
|
||||
controllers (whose v1 code is not compiled!), so that
|
||||
semi-legacy software can check this file to decide
|
||||
about usage of v2 (sic) controllers.
|
||||
|
||||
cgroup_favordynmods= [KNL] Enable or Disable favordynmods.
|
||||
Format: { "true" | "false" }
|
||||
Defaults to the value of CONFIG_CGROUP_FAVOR_DYNMODS.
|
||||
|
|
|
|||
|
|
@ -32,6 +32,9 @@ static u16 cgroup_no_v1_mask;
|
|||
/* disable named v1 mounts */
|
||||
static bool cgroup_no_v1_named;
|
||||
|
||||
/* Show unavailable controllers in /proc/cgroups */
|
||||
static bool proc_show_all;
|
||||
|
||||
/*
|
||||
* pidlist destructions need to be flushed on cgroup destruction. Use a
|
||||
* separate workqueue as flush domain.
|
||||
|
|
@ -683,10 +686,11 @@ int proc_cgroupstats_show(struct seq_file *m, void *v)
|
|||
*/
|
||||
|
||||
for_each_subsys(ss, i) {
|
||||
if (cgroup1_subsys_absent(ss))
|
||||
continue;
|
||||
cgrp_v1_visible |= ss->root != &cgrp_dfl_root;
|
||||
|
||||
if (!proc_show_all && cgroup1_subsys_absent(ss))
|
||||
continue;
|
||||
|
||||
seq_printf(m, "%s\t%d\t%d\t%d\n",
|
||||
ss->legacy_name, ss->root->hierarchy_id,
|
||||
atomic_read(&ss->root->nr_cgrps),
|
||||
|
|
@ -1359,3 +1363,9 @@ static int __init cgroup_no_v1(char *str)
|
|||
return 1;
|
||||
}
|
||||
__setup("cgroup_no_v1=", cgroup_no_v1);
|
||||
|
||||
static int __init cgroup_v1_proc(char *str)
|
||||
{
|
||||
return (kstrtobool(str, &proc_show_all) == 0);
|
||||
}
|
||||
__setup("cgroup_v1_proc=", cgroup_v1_proc);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user