From: msizanoen1 Date: Wed, 7 Dec 2022 16:09:33 +0000 (+0700) Subject: core/cgroup: ignore kernel cgroup.events when thawing X-Git-Tag: v253-rc1~330^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7fcd26978484b9a328b976799fbca038430f942f;p=thirdparty%2Fsystemd.git core/cgroup: ignore kernel cgroup.events when thawing The `frozen` state can be `0` while the processes are indeed frozen (see last commit). Therefore do not respect cgroup.events when checking whether thawing is necessary. --- diff --git a/src/core/cgroup.c b/src/core/cgroup.c index 9abcfe2b56b..ecc3cb32eff 100644 --- a/src/core/cgroup.c +++ b/src/core/cgroup.c @@ -4167,7 +4167,7 @@ int compare_job_priority(const void *a, const void *b) { int unit_cgroup_freezer_action(Unit *u, FreezerAction action) { _cleanup_free_ char *path = NULL; FreezerState target, kernel = _FREEZER_STATE_INVALID; - int r; + int r, ret; assert(u); assert(IN_SET(action, FREEZER_FREEZE, FREEZER_THAW)); @@ -4200,8 +4200,11 @@ int unit_cgroup_freezer_action(Unit *u, FreezerAction action) { if (target == kernel) { u->freezer_state = target; - return 0; - } + if (action == FREEZER_FREEZE) + return 0; + ret = 0; + } else + ret = 1; r = cg_get_path(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, "cgroup.freeze", &path); if (r < 0) @@ -4209,16 +4212,18 @@ int unit_cgroup_freezer_action(Unit *u, FreezerAction action) { log_unit_debug(u, "%s unit.", action == FREEZER_FREEZE ? "Freezing" : "Thawing"); - if (action == FREEZER_FREEZE) - u->freezer_state = FREEZER_FREEZING; - else - u->freezer_state = FREEZER_THAWING; + if (target != kernel) { + if (action == FREEZER_FREEZE) + u->freezer_state = FREEZER_FREEZING; + else + u->freezer_state = FREEZER_THAWING; + } r = write_string_file(path, one_zero(action == FREEZER_FREEZE), WRITE_STRING_FILE_DISABLE_BUFFER); if (r < 0) return r; - return 1; + return ret; } int unit_get_cpuset(Unit *u, CPUSet *cpus, const char *name) {