diff options
author | Mark Laws <mdl@60hz.org> | 2022-11-14 21:48:09 +0900 |
---|---|---|
committer | Mark Laws <mdl@60hz.org> | 2022-11-24 19:41:28 +0900 |
commit | 5fa098357e0ea9f05b00ed5b04a36ef9f64037db (patch) | |
tree | e7ade7b077e36a40e49837d6929f601ef52ae2db /src/core/scope.c | |
parent | 09cd639a59fec13d80ac8fce2d671d088d8cca9f (diff) | |
download | systemd-5fa098357e0ea9f05b00ed5b04a36ef9f64037db.tar.gz |
systemd: Support OOMPolicy in scope units
Closes #25376.
Diffstat (limited to 'src/core/scope.c')
-rw-r--r-- | src/core/scope.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/core/scope.c b/src/core/scope.c index 54a6cc63e4..e2fc4cc995 100644 --- a/src/core/scope.c +++ b/src/core/scope.c @@ -43,6 +43,7 @@ static void scope_init(Unit *u) { s->timeout_stop_usec = u->manager->default_timeout_stop_usec; u->ignore_on_isolate = true; s->user = s->group = NULL; + s->oom_policy = _OOM_POLICY_INVALID; } static void scope_done(Unit *u) { @@ -194,6 +195,11 @@ static int scope_add_extras(Scope *s) { if (r < 0) return r; + if (s->oom_policy < 0) + s->oom_policy = s->cgroup_context.delegate ? OOM_CONTINUE : UNIT(s)->manager->default_oom_policy; + + s->cgroup_context.memory_oom_group = s->oom_policy == OOM_KILL; + return scope_add_default_dependencies(s); } @@ -286,11 +292,13 @@ static void scope_dump(Unit *u, FILE *f, const char *prefix) { "%sScope State: %s\n" "%sResult: %s\n" "%sRuntimeMaxSec: %s\n" - "%sRuntimeRandomizedExtraSec: %s\n", + "%sRuntimeRandomizedExtraSec: %s\n" + "%sOOMPolicy: %s\n", prefix, scope_state_to_string(s->state), prefix, scope_result_to_string(s->result), prefix, FORMAT_TIMESPAN(s->runtime_max_usec, USEC_PER_SEC), - prefix, FORMAT_TIMESPAN(s->runtime_rand_extra_usec, USEC_PER_SEC)); + prefix, FORMAT_TIMESPAN(s->runtime_rand_extra_usec, USEC_PER_SEC), + prefix, oom_policy_to_string(s->oom_policy)); cgroup_context_dump(UNIT(s), f, prefix); kill_context_dump(&s->kill_context, f, prefix); @@ -635,11 +643,16 @@ static void scope_notify_cgroup_oom_event(Unit *u, bool managed_oom) { else log_unit_debug(u, "Process of control group was killed by the OOM killer."); - /* This will probably need to be modified when scope units get an oom-policy */ + if (s->oom_policy == OOM_CONTINUE) + return; + switch (s->state) { case SCOPE_START_CHOWN: case SCOPE_RUNNING: + scope_enter_signal(s, SCOPE_STOP_SIGTERM, SCOPE_FAILURE_OOM_KILL); + break; + case SCOPE_STOP_SIGTERM: scope_enter_signal(s, SCOPE_STOP_SIGKILL, SCOPE_FAILURE_OOM_KILL); break; |