Projects
Mega:23.03
systemd
_service:tar_scm:backport-cgroup-do-catchup-for...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:backport-cgroup-do-catchup-for-unit-cgroup-inotify-watch-file.patch of Package systemd
From 52ab3b8f534eafeed86908ad38f4cd0f169e23ff Mon Sep 17 00:00:00 2001 From: Dan Streetman <ddstreet@canonical.com> Date: Sun, 11 Jul 2021 16:59:27 -0400 Subject: [PATCH] cgroup: do 'catchup' for unit cgroup inotify watch files While reexec/reload, we drop the inotify watch on cgroup file(s), so we need to re-check them in case they changed and we missed the event. Fixes: #20198 (cherry picked from commit 869f52f21831b611160c4937bef822ca94c802ba) Conflict:NA Reference:https://github.com/systemd/systemd/commit/52ab3b8f534eafeed86908ad38f4cd0f169e23ff --- src/core/cgroup.c | 18 ++++++++++++++++++ src/core/cgroup.h | 2 ++ src/core/unit.c | 2 ++ 3 files changed, 22 insertions(+) diff --git a/src/core/cgroup.c b/src/core/cgroup.c index 3a6f768c60..5c07aa71d1 100644 --- a/src/core/cgroup.c +++ b/src/core/cgroup.c @@ -3039,6 +3039,9 @@ static int unit_check_cgroup_events(Unit *u) { assert(u); + if (!u->cgroup_path) + return 0; + r = cg_get_keyed_attribute_graceful(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, "cgroup.events", STRV_MAKE("populated", "frozen"), values); if (r < 0) @@ -3871,6 +3874,21 @@ void unit_invalidate_cgroup_bpf(Unit *u) { } } +void unit_cgroup_catchup(Unit *u) { + assert(u); + + if (!UNIT_HAS_CGROUP_CONTEXT(u)) + return; + + /* We dropped the inotify watch during reexec/reload, so we need to + * check these as they may have changed. + * Note that (currently) the kernel doesn't actually update cgroup + * file modification times, so we can't just serialize and then check + * the mtime for file(s) we are interested in. */ + (void) unit_check_cgroup_events(u); + unit_add_to_cgroup_oom_queue(u); +} + bool unit_cgroup_delegate(Unit *u) { CGroupContext *c; diff --git a/src/core/cgroup.h b/src/core/cgroup.h index ea929368cb..3f8cad899d 100644 --- a/src/core/cgroup.h +++ b/src/core/cgroup.h @@ -313,6 +313,8 @@ void manager_invalidate_startup_units(Manager *m); const char* cgroup_device_policy_to_string(CGroupDevicePolicy i) _const_; CGroupDevicePolicy cgroup_device_policy_from_string(const char *s) _pure_; +void unit_cgroup_catchup(Unit *u); + bool unit_cgroup_delegate(Unit *u); int compare_job_priority(const void *a, const void *b); diff --git a/src/core/unit.c b/src/core/unit.c index 47966bcf0d..7e3bd7505e 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -3616,6 +3616,8 @@ void unit_catchup(Unit *u) { if (UNIT_VTABLE(u)->catchup) UNIT_VTABLE(u)->catchup(u); + + unit_cgroup_catchup(u); } static bool fragment_mtime_newer(const char *path, usec_t mtime, bool path_masked) { -- 2.33.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2