diff options
Diffstat (limited to 'src/core/load-fragment.c')
-rw-r--r-- | src/core/load-fragment.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index 288de616b6..8e33c83398 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -3263,36 +3263,38 @@ int config_parse_tasks_max( void *data, void *userdata) { - uint64_t *tasks_max = data, v; - const Unit *u = userdata; + TasksMax *tasks_max = data; + uint64_t v; int r; if (isempty(rvalue)) { - *tasks_max = u ? u->manager->default_tasks_max : UINT64_MAX; + *tasks_max = (TasksMax) {}; return 0; } if (streq(rvalue, "infinity")) { - *tasks_max = CGROUP_LIMIT_MAX; + *tasks_max = (TasksMax) { CGROUP_LIMIT_MAX }; return 0; } r = parse_permille(rvalue); - if (r < 0) { + if (r >= 0) + *tasks_max = (TasksMax) { v, 1000U }; + else { r = safe_atou64(rvalue, &v); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, r, "Invalid maximum tasks value '%s', ignoring: %m", rvalue); return 0; } - } else - v = system_tasks_max_scale(r, 1000U); - if (v <= 0 || v >= UINT64_MAX) { - log_syntax(unit, LOG_ERR, filename, line, 0, "Maximum tasks value '%s' out of range, ignoring.", rvalue); - return 0; + if (v <= 0 || v >= UINT64_MAX) { + log_syntax(unit, LOG_ERR, filename, line, 0, "Maximum tasks value '%s' out of range, ignoring.", rvalue); + return 0; + } + + *tasks_max = (TasksMax) { v }; } - *tasks_max = v; return 0; } |