linux/debian/patches/features/all/cgroups-Allow-memory-cgroup...

106 lines
3.3 KiB
Diff

From: Ben Hutchings <ben@decadent.org.uk>
Date: Sun, 30 May 2010 22:43:38 +0100
Subject: cgroups: Allow memory cgroup support to be included but disabled
Forwarded: no
Memory cgroup support has some run-time overhead, so it's useful to
include it in a distribution kernel without enabling it by default.
Add a kernel config option to disable it by default and a kernel
parameter 'cgroup_enable' as the opposite to 'cgroup_disable'.
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
[Bastian Blank: Rename CGROUP_MEM_RES_CTLR_DISABLED to MEMCG_DISABLED]
---
Documentation/kernel-parameters.txt | 4 ++--
init/Kconfig | 8 ++++++++
kernel/cgroup.c | 20 ++++++++++++++++----
mm/memcontrol.c | 3 +++
4 files changed, 29 insertions(+), 6 deletions(-)
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -580,8 +580,8 @@ bytes respectively. Such letter suffixes
ccw_timeout_log [S390]
See Documentation/s390/CommonIO for details.
- cgroup_disable= [KNL] Disable a particular controller
- Format: {name of the controller(s) to disable}
+ cgroup_disable= [KNL] Disable/enable a particular controller
+ cgroup_enable= Format: {name of the controller(s) to disable/enable}
The effects of cgroup_disable=foo are:
- foo isn't auto-mounted if you mount all cgroups in
a single hierarchy
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -990,6 +990,14 @@ config MEMCG
Provides a memory resource controller that manages both anonymous
memory and page cache. (See Documentation/cgroups/memory.txt)
+config MEMCG_DISABLED
+ bool "Memory Resource Controller disabled by default"
+ depends on MEMCG
+ default n
+ help
+ Disable the memory group resource controller unless explicitly
+ enabled using the kernel parameter "cgroup_enable=memory".
+
config MEMCG_SWAP
bool "Memory Resource Controller Swap Extension"
depends on MEMCG && SWAP
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
@@ -5370,7 +5370,7 @@ out_free:
kfree(pathbuf);
}
-static int __init cgroup_disable(char *str)
+static int __init cgroup_set_disabled(char *str, int value)
{
struct cgroup_subsys *ss;
char *token;
@@ -5382,17 +5382,29 @@ static int __init cgroup_disable(char *s
for_each_subsys(ss, i) {
if (!strcmp(token, ss->name)) {
- ss->disabled = 1;
- printk(KERN_INFO "Disabling %s control group"
- " subsystem\n", ss->name);
+ ss->disabled = value;
+ printk(KERN_INFO
+ "%sabling %s control group subsystem\n",
+ value ? "Dis" : "En", ss->name);
break;
}
}
}
return 1;
}
+
+static int __init cgroup_disable(char *str)
+{
+ return cgroup_set_disabled(str, 1);
+}
__setup("cgroup_disable=", cgroup_disable);
+static int __init cgroup_enable(char *str)
+{
+ return cgroup_set_disabled(str, 0);
+}
+__setup("cgroup_enable=", cgroup_enable);
+
static int __init cgroup_set_legacy_files_on_dfl(char *str)
{
printk("cgroup: using legacy files on the default hierarchy\n");
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -5379,6 +5379,9 @@ static struct cftype memory_files[] = {
};
struct cgroup_subsys memory_cgrp_subsys = {
+#ifdef CONFIG_MEMCG_DISABLED
+ .disabled = 1,
+#endif
.css_alloc = mem_cgroup_css_alloc,
.css_online = mem_cgroup_css_online,
.css_offline = mem_cgroup_css_offline,