[systemd-devel] [PATCH] cgroup: fix incorrectly setting memory cgroup

2013-09-13 Thread Gao feng
If the memory_limit of unit is -1, we should write -1
to the file memory.limit_in_bytes. not the (unit64_t) -1.

otherwise the memory.limit_in_bytes will be set to zero.
---
 src/core/cgroup.c | 15 +++
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/core/cgroup.c b/src/core/cgroup.c
index aee93ba..244baff 100644
--- a/src/core/cgroup.c
+++ b/src/core/cgroup.c
@@ -257,14 +257,21 @@ void cgroup_context_apply(CGroupContext *c, 
CGroupControllerMask mask, const cha
 
 if (mask  CGROUP_MEMORY) {
 char buf[DECIMAL_STR_MAX(uint64_t) + 1];
+if (c-memory_limit != (uint64_t) -1) {
+sprintf(buf, % PRIu64 \n, c-memory_limit);
+r = cg_set_attribute(memory, path, 
memory.limit_in_bytes, buf);
+} else
+r = cg_set_attribute(memory, path, 
memory.limit_in_bytes, -1);
 
-sprintf(buf, % PRIu64 \n, c-memory_limit);
-r = cg_set_attribute(memory, path, memory.limit_in_bytes, 
buf);
 if (r  0)
 log_error(Failed to set memory.limit_in_bytes on %s: 
%s, path, strerror(-r));
 
-sprintf(buf, % PRIu64 \n, c-memory_soft_limit);
-r = cg_set_attribute(memory, path, 
memory.soft_limit_in_bytes, buf);
+if (c-memory_soft_limit != (uint64_t) -1) {
+sprintf(buf, % PRIu64 \n, c-memory_soft_limit);
+r = cg_set_attribute(memory, path, 
memory.soft_limit_in_bytes, buf);
+} else
+r = cg_set_attribute(memory, path, 
memory.soft_limit_in_bytes, -1);
+
 if (r  0)
 log_error(Failed to set memory.soft_limit_in_bytes on 
%s: %s, path, strerror(-r));
 }
-- 
1.8.3.1

___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] [PATCH] cgroup: fix incorrectly setting memory cgroup

2013-09-13 Thread Lennart Poettering
On Fri, 13.09.13 14:43, Gao feng (gaof...@cn.fujitsu.com) wrote:

 If the memory_limit of unit is -1, we should write -1
 to the file memory.limit_in_bytes. not the (unit64_t) -1.
 
 otherwise the memory.limit_in_bytes will be set to zero.

Thanks! Applied!
 ---
  src/core/cgroup.c | 15 +++
  1 file changed, 11 insertions(+), 4 deletions(-)
 
 diff --git a/src/core/cgroup.c b/src/core/cgroup.c
 index aee93ba..244baff 100644
 --- a/src/core/cgroup.c
 +++ b/src/core/cgroup.c
 @@ -257,14 +257,21 @@ void cgroup_context_apply(CGroupContext *c, 
 CGroupControllerMask mask, const cha
  
  if (mask  CGROUP_MEMORY) {
  char buf[DECIMAL_STR_MAX(uint64_t) + 1];
 +if (c-memory_limit != (uint64_t) -1) {
 +sprintf(buf, % PRIu64 \n, c-memory_limit);
 +r = cg_set_attribute(memory, path, 
 memory.limit_in_bytes, buf);
 +} else
 +r = cg_set_attribute(memory, path, 
 memory.limit_in_bytes, -1);
  
 -sprintf(buf, % PRIu64 \n, c-memory_limit);
 -r = cg_set_attribute(memory, path, 
 memory.limit_in_bytes, buf);
  if (r  0)
  log_error(Failed to set memory.limit_in_bytes on 
 %s: %s, path, strerror(-r));
  
 -sprintf(buf, % PRIu64 \n, c-memory_soft_limit);
 -r = cg_set_attribute(memory, path, 
 memory.soft_limit_in_bytes, buf);
 +if (c-memory_soft_limit != (uint64_t) -1) {
 +sprintf(buf, % PRIu64 \n, c-memory_soft_limit);
 +r = cg_set_attribute(memory, path, 
 memory.soft_limit_in_bytes, buf);
 +} else
 +r = cg_set_attribute(memory, path, 
 memory.soft_limit_in_bytes, -1);
 +
  if (r  0)
  log_error(Failed to set memory.soft_limit_in_bytes 
 on %s: %s, path, strerror(-r));
  }


Lennart

-- 
Lennart Poettering - Red Hat, Inc.
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel