From: msizanoen1 Date: Wed, 7 Dec 2022 09:32:05 +0000 (+0700) Subject: core/cgroup: thaw slice of unit when thawing unit X-Git-Tag: v253-rc1~330^2~4 X-Git-Url: http://git-history.diyao.me/?a=commitdiff_plain;h=a14137d90e5f50ad8627c85ae94731a5c9948227;p=systemd%2F.git core/cgroup: thaw slice of unit when thawing unit This ensures starting a new unit under a frozen slice work as expected. --- 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);