Skip to content

Commit

Permalink
scope: count successful cgroup additions when delegating via D-Bus
Browse files Browse the repository at this point in the history
Since commit 8d3e4ac ("scope: refuse
activation of scopes if no PIDs to add are left") all "systemd-run --scope
--user" calls fail because cgroup attachments delegated to the system instance
are not counted towards successful additions. Fix this by incrementing the
return value in case unit_attach_pid_to_cgroup_via_bus() succeeds, similar to
what happens when cg_attach() succeeds directly.

Note that this can *not* distinguish the case when
unit_attach_pid_to_cgroup_via_bus() has been run successfully, but all
processes to attach are gone in the meantime, unlike the checks that commit
8d3e4ac adds for the system instance. This is
because even though unit_attach_pid_to_cgroup_via_bus() leads to an internal
unit_attach_pids_to_cgroup() call, the return value over D-Bus does not include
the number of successfully attached processes and is always NULL on success.

Fixes: systemd#21297
  • Loading branch information
diabonas committed Nov 10, 2021
1 parent 8b212f3 commit d35551d
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion src/core/cgroup.c
Expand Up @@ -2283,8 +2283,11 @@ int unit_attach_pids_to_cgroup(Unit *u, Set *pids, const char *suffix_path) {
z = unit_attach_pid_to_cgroup_via_bus(u, pid, suffix_path);
if (z < 0)
log_unit_info_errno(u, z, "Couldn't move process "PID_FMT" to requested cgroup '%s' (directly or via the system bus): %m", pid, empty_to_root(p));
else
else {
if (ret >= 0)
ret++; /* Count successful additions */
continue; /* When the bus thing worked via the bus we are fully done for this PID. */
}
}

if (ret >= 0)
Expand Down

0 comments on commit d35551d

Please sign in to comment.