summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Koutný <mkoutny@suse.com>2020-02-04 14:50:51 +0100
committerMichal Koutný <mkoutny@suse.com>2020-06-02 18:59:47 +0200
commitdb2b8d2e2895010f3443a589c9c1f1dfb25256a6 (patch)
tree82c28243e30fb96ac0d26e6d6e2d741573e7c58c
parent21c8397694bd62fa0bc25d92a6508ae7a74e6156 (diff)
downloadsystemd-db2b8d2e2895010f3443a589c9c1f1dfb25256a6.tar.gz
cgroup: Make empty assignments reset to default
When MemoryLow= or MemoryMin= is set, it is interpretted as setting the values to infinity. This is inconsistent with the default initialization to 0. It'd be nice to interpret the empty assignment as fallback to DefaultMemory* of parent slice, however, current DBus API cannot convey such a NULL value, so stick to simply interpretting that as hard-wired default.
-rw-r--r--src/core/load-fragment.c16
-rw-r--r--src/shared/bus-unit-util.c15
2 files changed, 22 insertions, 9 deletions
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
index a967627946..781fe66f5e 100644
--- a/src/core/load-fragment.c
+++ b/src/core/load-fragment.c
@@ -3371,6 +3371,12 @@ int config_parse_memory_limit(
uint64_t bytes = CGROUP_LIMIT_MAX;
int r;
+ if (STR_IN_SET(lvalue, "DefaultMemoryLow",
+ "DefaultMemoryMin",
+ "MemoryLow",
+ "MemoryMin"))
+ bytes = CGROUP_LIMIT_MIN;
+
if (!isempty(rvalue) && !streq(rvalue, "infinity")) {
r = parse_permille(rvalue);
@@ -3391,17 +3397,11 @@ int config_parse_memory_limit(
}
if (streq(lvalue, "DefaultMemoryLow")) {
+ c->default_memory_low = bytes;
c->default_memory_low_set = true;
- if (isempty(rvalue))
- c->default_memory_low = CGROUP_LIMIT_MIN;
- else
- c->default_memory_low = bytes;
} else if (streq(lvalue, "DefaultMemoryMin")) {
+ c->default_memory_min = bytes;
c->default_memory_min_set = true;
- if (isempty(rvalue))
- c->default_memory_min = CGROUP_LIMIT_MIN;
- else
- c->default_memory_min = bytes;
} else if (streq(lvalue, "MemoryMin")) {
c->memory_min = bytes;
c->memory_min_set = true;
diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c
index 9a5730f3ea..48171469a5 100644
--- a/src/shared/bus-unit-util.c
+++ b/src/shared/bus-unit-util.c
@@ -489,11 +489,24 @@ static int bus_append_cgroup_property(sd_bus_message *m, const char *field, cons
"MemoryLimit",
"TasksMax")) {
- if (isempty(eq) || streq(eq, "infinity")) {
+ if (streq(eq, "infinity")) {
r = sd_bus_message_append(m, "(sv)", field, "t", CGROUP_LIMIT_MAX);
if (r < 0)
return bus_log_create_error(r);
return 1;
+ } else if (isempty(eq)) {
+ uint64_t empty_value = STR_IN_SET(field,
+ "DefaultMemoryLow",
+ "DefaultMemoryMin",
+ "MemoryLow",
+ "MemoryMin") ?
+ CGROUP_LIMIT_MIN :
+ CGROUP_LIMIT_MAX;
+
+ r = sd_bus_message_append(m, "(sv)", field, "t", empty_value);
+ if (r < 0)
+ return bus_log_create_error(r);
+ return 1;
}
r = parse_permille(eq);