From a14137d90e5f50ad8627c85ae94731a5c9948227 Mon Sep 17 00:00:00 2001 From: msizanoen1 Date: Wed, 7 Dec 2022 16:32:05 +0700 Subject: [PATCH] core/cgroup: thaw slice of unit when thawing unit This ensures starting a new unit under a frozen slice work as expected. --- src/core/cgroup.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/core/cgroup.c b/src/core/cgroup.c index 1e9cb758de..9abcfe2b56 100644 --- a/src/core/cgroup.c +++ b/src/core/cgroup.c @@ -4175,9 +4175,23 @@ int unit_cgroup_freezer_action(Unit *u, FreezerAction action) { if (!cg_freezer_supported()) return 0; + /* Ignore all requests to thaw init.scope or -.slice and reject all requests to freeze them */ + if (unit_has_name(u, SPECIAL_ROOT_SLICE) || unit_has_name(u, SPECIAL_INIT_SCOPE)) + return action == FREEZER_FREEZE ? -EPERM : 0; + if (!u->cgroup_realized) return -EBUSY; + if (action == FREEZER_THAW) { + Unit *slice = UNIT_GET_SLICE(u); + + if (slice) { + r = unit_cgroup_freezer_action(slice, FREEZER_THAW); + if (r < 0) + return log_unit_error_errno(u, r, "Failed to thaw slice %s of unit: %m", slice->id); + } + } + target = action == FREEZER_FREEZE ? FREEZER_FROZEN : FREEZER_RUNNING; r = unit_freezer_state_kernel(u, &kernel); -- 2.25.1