From: Lennart Poettering Date: Thu, 7 Sep 2017 12:32:33 +0000 (+0200) Subject: core: when coming back from reload/reexec, reapply all cgroup properties X-Git-Tag: v235~60^2~16 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=58d83430e1276fe8d1224c2b5f76e756d143a375;p=thirdparty%2Fsystemd.git core: when coming back from reload/reexec, reapply all cgroup properties With this change we'll invalidate all cgroup settings after coming back from a daemon reload/reexec, so that the new settings are instantly applied. This is useful for the BPF case, because we don't serialize/deserialize the BPF program fd, and hence have to install a new, updated BPF program when coming back from the reload/reexec. However, this is also useful for the rest of the cgroup settings, as it ensures that user configuration really takes effect wherever we can. --- diff --git a/src/core/cgroup.c b/src/core/cgroup.c index c6667b39c78..e9cb0d35c91 100644 --- a/src/core/cgroup.c +++ b/src/core/cgroup.c @@ -1533,6 +1533,7 @@ static int unit_realize_cgroup_now(Unit *u, ManagerState state) { } static void unit_add_to_cgroup_queue(Unit *u) { + assert(u); if (u->in_cgroup_queue) return; diff --git a/src/core/unit.c b/src/core/unit.c index 5ed57644551..68295d64455 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -3205,6 +3205,11 @@ int unit_deserialize(Unit *u, FILE *f, FDSet *fds) { if (!dual_timestamp_is_set(&u->state_change_timestamp)) dual_timestamp_get(&u->state_change_timestamp); + /* Let's make sure that everything that is deserialized also gets any potential new cgroup settings applied + * after we are done. For that we invalidate anything already realized, so that we can realize it again. */ + unit_invalidate_cgroup(u, _CGROUP_MASK_ALL); + unit_invalidate_cgroup_bpf(u); + return 0; }