提交 e5d0ce4e 编写于 作者: S Shakeel Butt 提交者: Wang ShaoBo

cgroup: disable controllers at parse time

stable inclusion
from stable-v5.10.44
commit 5ca472d40e2daebbfd926701902debcab0bbd15c
bugzilla: https://bugzilla.openeuler.org/show_bug.cgi?id=405
CVE: NA

-------------------------------------------------

[ Upstream commit 45e1ba40 ]

This patch effectively reverts the commit a3e72739 ("cgroup: fix
too early usage of static_branch_disable()"). The commit 6041186a
("init: initialize jump labels before command line option parsing") has
moved the jump_label_init() before parse_args() which has made the
commit a3e72739 unnecessary. On the other hand there are
consequences of disabling the controllers later as there are subsystems
doing the controller checks for different decisions. One such incident
is reported [1] regarding the memory controller and its impact on memory
reclaim code.

[1] https://lore.kernel.org/linux-mm/921e53f3-4b13-aab8-4a9e-e83ff15371e4@nec.comSigned-off-by: NShakeel Butt <shakeelb@google.com>
Reported-by: NNOMURA JUNICHI(野村 淳一) <junichi.nomura@nec.com>
Signed-off-by: NTejun Heo <tj@kernel.org>
Tested-by: NJun'ichi Nomura <junichi.nomura@nec.com>
Signed-off-by: NSasha Levin <sashal@kernel.org>
Signed-off-by: Troms_'s avatar13673108243 <13673108243@163.com>
Reviewed-by: NJian Cheng <cj.chengjian@huawei.com>
Signed-off-by: NWang ShaoBo <bobo.shaobowang@huawei.com>
上级 3f6b6b6f
...@@ -5683,8 +5683,8 @@ int __init cgroup_init_early(void) ...@@ -5683,8 +5683,8 @@ int __init cgroup_init_early(void)
return 0; return 0;
} }
static u16 cgroup_disable_mask __initdata;
#ifdef CONFIG_OPENEULER_RASPBERRYPI #ifdef CONFIG_OPENEULER_RASPBERRYPI
static u16 cgroup_disable_mask __initdata;
static u16 cgroup_enable_mask __initdata; static u16 cgroup_enable_mask __initdata;
static int __init cgroup_disable(char *str); static int __init cgroup_disable(char *str);
#endif #endif
...@@ -5755,12 +5755,8 @@ int __init cgroup_init(void) ...@@ -5755,12 +5755,8 @@ int __init cgroup_init(void)
* disabled flag and cftype registration needs kmalloc, * disabled flag and cftype registration needs kmalloc,
* both of which aren't available during early_init. * both of which aren't available during early_init.
*/ */
if (cgroup_disable_mask & (1 << ssid)) { if (!cgroup_ssid_enabled(ssid))
static_branch_disable(cgroup_subsys_enabled_key[ssid]);
printk(KERN_INFO "Disabling %s control group subsystem\n",
ss->name);
continue; continue;
}
if (cgroup1_ssid_disabled(ssid)) if (cgroup1_ssid_disabled(ssid))
printk(KERN_INFO "Disabling %s control group subsystem in v1 mounts\n", printk(KERN_INFO "Disabling %s control group subsystem in v1 mounts\n",
...@@ -6275,7 +6271,10 @@ static int __init cgroup_disable(char *str) ...@@ -6275,7 +6271,10 @@ static int __init cgroup_disable(char *str)
if (strcmp(token, ss->name) && if (strcmp(token, ss->name) &&
strcmp(token, ss->legacy_name)) strcmp(token, ss->legacy_name))
continue; continue;
cgroup_disable_mask |= 1 << i;
static_branch_disable(cgroup_subsys_enabled_key[i]);
pr_info("Disabling %s control group subsystem\n",
ss->name);
} }
} }
return 1; return 1;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册