ryantimwilson / rpms / systemd

Forked from rpms/systemd a month ago
Clone
Harald Hoyer d4ee25
From c7e5130d5b3983986bfe95918c75e083fa90dd47 Mon Sep 17 00:00:00 2001
Harald Hoyer d4ee25
From: Gao feng <gaofeng@cn.fujitsu.com>
Harald Hoyer d4ee25
Date: Fri, 13 Sep 2013 14:43:04 +0800
Harald Hoyer d4ee25
Subject: [PATCH] cgroup: fix incorrectly setting memory cgroup
Harald Hoyer d4ee25
Harald Hoyer d4ee25
If the memory_limit of unit is -1, we should write "-1"
Harald Hoyer d4ee25
to the file memory.limit_in_bytes. not the (unit64_t) -1.
Harald Hoyer d4ee25
Harald Hoyer d4ee25
otherwise the memory.limit_in_bytes will be set to zero.
Harald Hoyer d4ee25
---
Harald Hoyer d4ee25
 src/core/cgroup.c | 15 +++++++++++----
Harald Hoyer d4ee25
 1 file changed, 11 insertions(+), 4 deletions(-)
Harald Hoyer d4ee25
Harald Hoyer d4ee25
diff --git a/src/core/cgroup.c b/src/core/cgroup.c
Harald Hoyer d4ee25
index 08cb64b..1f41efc 100644
Harald Hoyer d4ee25
--- a/src/core/cgroup.c
Harald Hoyer d4ee25
+++ b/src/core/cgroup.c
Harald Hoyer d4ee25
@@ -257,14 +257,21 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha
Harald Hoyer d4ee25
 
Harald Hoyer d4ee25
         if (mask & CGROUP_MEMORY) {
Harald Hoyer d4ee25
                 char buf[DECIMAL_STR_MAX(uint64_t) + 1];
Harald Hoyer d4ee25
+                if (c->memory_limit != (uint64_t) -1) {
Harald Hoyer d4ee25
+                        sprintf(buf, "%" PRIu64 "\n", c->memory_limit);
Harald Hoyer d4ee25
+                        r = cg_set_attribute("memory", path, "memory.limit_in_bytes", buf);
Harald Hoyer d4ee25
+                } else
Harald Hoyer d4ee25
+                        r = cg_set_attribute("memory", path, "memory.limit_in_bytes", "-1");
Harald Hoyer d4ee25
 
Harald Hoyer d4ee25
-                sprintf(buf, "%" PRIu64 "\n", c->memory_limit);
Harald Hoyer d4ee25
-                r = cg_set_attribute("memory", path, "memory.limit_in_bytes", buf);
Harald Hoyer d4ee25
                 if (r < 0)
Harald Hoyer d4ee25
                         log_error("Failed to set memory.limit_in_bytes on %s: %s", path, strerror(-r));
Harald Hoyer d4ee25
 
Harald Hoyer d4ee25
-                sprintf(buf, "%" PRIu64 "\n", c->memory_soft_limit);
Harald Hoyer d4ee25
-                r = cg_set_attribute("memory", path, "memory.soft_limit_in_bytes", buf);
Harald Hoyer d4ee25
+                if (c->memory_soft_limit != (uint64_t) -1) {
Harald Hoyer d4ee25
+                        sprintf(buf, "%" PRIu64 "\n", c->memory_soft_limit);
Harald Hoyer d4ee25
+                        r = cg_set_attribute("memory", path, "memory.soft_limit_in_bytes", buf);
Harald Hoyer d4ee25
+                } else
Harald Hoyer d4ee25
+                        r = cg_set_attribute("memory", path, "memory.soft_limit_in_bytes", "-1");
Harald Hoyer d4ee25
+
Harald Hoyer d4ee25
                 if (r < 0)
Harald Hoyer d4ee25
                         log_error("Failed to set memory.soft_limit_in_bytes on %s: %s", path, strerror(-r));
Harald Hoyer d4ee25
         }