mirror of
https://github.com/morgan9e/systemd
synced 2026-04-15 08:56:15 +09:00
core: skip deps on oomd if v2 or memory unavailable
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2055664 Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2172146 User report that systemd repeatedly logs about not being able to start oomd when booted with v1: Feb 20 16:52:33 systemd[1]: systemd-oomd.service - Userspace Out-Of-Memory (OOM) Killer was skipped because of a failed condition check (ConditionControlGroupController=v2). Feb 20 16:52:34 systemd[1]: systemd-oomd.service - Userspace Out-Of-Memory (OOM) Killer was skipped because of a failed condition check (ConditionControlGroupController=v2). Feb 20 16:52:34 systemd[1]: systemd-oomd.service - Userspace Out-Of-Memory (OOM) Killer was skipped because of a failed condition check (ConditionControlGroupController=v2). Feb 20 16:52:34 systemd[1]: systemd-oomd.service - Userspace Out-Of-Memory (OOM) Killer was skipped because of a failed condition check (ConditionControlGroupController=v2). Feb 20 16:52:34 systemd[1]: systemd-oomd.service - Userspace Out-Of-Memory (OOM) Killer was skipped because of a failed condition check (ConditionControlGroupController=v2). Feb 20 16:52:34 systemd[1]: systemd-oomd.service - Userspace Out-Of-Memory (OOM) Killer was skipped because of a failed condition check (ConditionControlGroupController=v2). Feb 20 16:52:34 systemd[2067491]: Queued start job for default target default.target. Feb 20 16:52:34 systemd[1]: systemd-oomd.service - Userspace Out-Of-Memory (OOM) Killer was skipped because of a failed condition check (ConditionControlGroupController=v2). Feb 20 16:52:34 systemd[2067491]: Created slice app.slice - User Application Slice. Feb 20 16:52:34 systemd[1]: systemd-oomd.service - Userspace Out-Of-Memory (OOM) Killer was skipped because of a failed condition check (ConditionControlGroupController=v2). systemd-oomd.service that pulls systemd-oomd.socket in (because it requires it); systemd-oomd.service itself is pulled by user@.service because systemd-oomd package installs an override config file that sets ManagedOOMMemoryPressure=kill. Add a check to the code that adds the implicit dependency to skip the dep if we cannot start it. The check is done exactly the same as in oomd itself.
This commit is contained in:
@@ -1546,7 +1546,8 @@ static int unit_add_mount_dependencies(Unit *u) {
|
||||
|
||||
static int unit_add_oomd_dependencies(Unit *u) {
|
||||
CGroupContext *c;
|
||||
bool wants_oomd;
|
||||
CGroupMask mask;
|
||||
int r;
|
||||
|
||||
assert(u);
|
||||
|
||||
@@ -1557,10 +1558,20 @@ static int unit_add_oomd_dependencies(Unit *u) {
|
||||
if (!c)
|
||||
return 0;
|
||||
|
||||
wants_oomd = (c->moom_swap == MANAGED_OOM_KILL || c->moom_mem_pressure == MANAGED_OOM_KILL);
|
||||
bool wants_oomd = c->moom_swap == MANAGED_OOM_KILL || c->moom_mem_pressure == MANAGED_OOM_KILL;
|
||||
if (!wants_oomd)
|
||||
return 0;
|
||||
|
||||
if (!cg_all_unified())
|
||||
return 0;
|
||||
|
||||
r = cg_mask_supported(&mask);
|
||||
if (r < 0)
|
||||
return log_debug_errno(r, "Failed to determine supported controllers: %m");
|
||||
|
||||
if (!FLAGS_SET(mask, CGROUP_MASK_MEMORY))
|
||||
return 0;
|
||||
|
||||
return unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_WANTS, "systemd-oomd.service", true, UNIT_DEPENDENCY_FILE);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user