For simplicity, we do not implement hierarchy support for oom_guarantee
knob. Instead, we take it into account only on global OOM and only for
those memory cgroups that are assigned to a beancounter. To avoid
complaints from container users that the knob does not work as expected,
let's forbid setting it from inside a container.

Signed-off-by: Vladimir Davydov <vdavy...@parallels.com>
---
 mm/memcontrol.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 505952f22ea9..86c0500bf508 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -5238,6 +5238,18 @@ static int mem_cgroup_oom_guarantee_write(struct cgroup 
*cont,
        unsigned long long val;
        int ret;
 
+       /*
+        * Although the knob for setting OOM guarantee lives in the memory
+        * cgroup, the logic behind it is implemented per beancounter, i.e. it
+        * only makes sense to set it for a memory cgroup assigned to a
+        * container via beancounter.memory, otherwise its value will be
+        * silently ignored. To avoid complaints from container users that the
+        * knob does not work as expected, we forbid setting it from inside a
+        * container.
+        */
+       if (!ve_is_super(get_exec_env()))
+               return -EACCES;
+
        ret = res_counter_memparse_write_strategy(buffer, &val);
        if (ret)
                return ret;
-- 
2.1.4

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to