From 5d397dc7f48edbc463cdd021d12ebce910713a11 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sat, 30 Aug 2025 08:29:37 +0900 Subject: [PATCH] cgroup-util: drop 'controller' argument from cg_get_keyed_attribute() and cg_is_empty() The argument is completely unused. Let's drop it. --- src/basic/cgroup-util.c | 7 +++---- src/basic/cgroup-util.h | 4 ++-- src/cgtop/cgtop.c | 2 +- src/core/cgroup.c | 8 ++------ src/core/service.c | 2 +- src/login/loginctl.c | 2 +- src/machine/machine.c | 4 ++-- src/machine/machinectl.c | 2 +- src/oom/oomd-util.c | 2 +- src/oom/test-oomd-util.c | 2 +- src/shared/cgroup-show.c | 2 +- src/test/test-cgroup-setup.c | 6 ++---- src/test/test-cgroup-util.c | 12 ++++++------ 13 files changed, 24 insertions(+), 31 deletions(-) diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c index c31f2a1b05c..b01b7b6a3fb 100644 --- a/src/basic/cgroup-util.c +++ b/src/basic/cgroup-util.c @@ -610,7 +610,7 @@ int cg_pidref_get_path(const PidRef *pidref, char **ret_path) { return 0; } -int cg_is_empty(const char *controller, const char *path) { +int cg_is_empty(const char *path) { _cleanup_free_ char *t = NULL; int r; @@ -623,7 +623,7 @@ int cg_is_empty(const char *controller, const char *path) { if (empty_or_root(path)) return false; - r = cg_get_keyed_attribute(controller, path, "cgroup.events", STRV_MAKE("populated"), &t); + r = cg_get_keyed_attribute(path, "cgroup.events", STRV_MAKE("populated"), &t); if (r == -ENOENT) return true; if (r < 0) @@ -1551,7 +1551,6 @@ int cg_get_owner(const char *path, uid_t *ret_uid) { } int cg_get_keyed_attribute( - const char *controller, const char *path, const char *attribute, char * const *keys, @@ -1570,7 +1569,7 @@ int cg_get_keyed_attribute( * * If the attribute file doesn't exist at all returns ENOENT, if any key is not found returns ENXIO. */ - r = cg_get_path(controller, path, attribute, &filename); + r = cg_get_path(SYSTEMD_CGROUP_CONTROLLER, path, attribute, &filename); if (r < 0) return r; diff --git a/src/basic/cgroup-util.h b/src/basic/cgroup-util.h index ac02d68dcd6..9c534ac594c 100644 --- a/src/basic/cgroup-util.h +++ b/src/basic/cgroup-util.h @@ -181,7 +181,7 @@ int cg_get_attribute(const char *path, const char *attribute, char **ret); int cg_get_attribute_as_uint64(const char *path, const char *attribute, uint64_t *ret); int cg_get_attribute_as_bool(const char *path, const char *attribute); -int cg_get_keyed_attribute(const char *controller, const char *path, const char *attribute, char * const *keys, char **values); +int cg_get_keyed_attribute(const char *path, const char *attribute, char * const *keys, char **values); int cg_get_owner(const char *path, uid_t *ret_uid); @@ -191,7 +191,7 @@ int cg_get_xattr(const char *path, const char *name, char **ret, size_t *ret_siz int cg_get_xattr_bool(const char *path, const char *name); int cg_remove_xattr(const char *path, const char *name); -int cg_is_empty(const char *controller, const char *path); +int cg_is_empty(const char *path); int cg_get_root_path(char **path); diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c index 9a3f1a811bd..99f1fe22aef 100644 --- a/src/cgtop/cgtop.c +++ b/src/cgtop/cgtop.c @@ -288,7 +288,7 @@ static int process_cpu(Group *g, unsigned iteration) { _cleanup_free_ char *val = NULL; uint64_t u; - r = cg_get_keyed_attribute(SYSTEMD_CGROUP_CONTROLLER, g->path, "cpu.stat", STRV_MAKE("usage_usec"), &val); + r = cg_get_keyed_attribute(g->path, "cpu.stat", STRV_MAKE("usage_usec"), &val); if (IN_SET(r, -ENOENT, -ENXIO)) return 0; if (r < 0) diff --git a/src/core/cgroup.c b/src/core/cgroup.c index 7279682b63f..6f3e61ea3af 100644 --- a/src/core/cgroup.c +++ b/src/core/cgroup.c @@ -2714,7 +2714,7 @@ int unit_cgroup_is_empty(Unit *u) { if (!crt->cgroup_path) return -EOWNERDEAD; - r = cg_is_empty(SYSTEMD_CGROUP_CONTROLLER, crt->cgroup_path); + r = cg_is_empty(crt->cgroup_path); if (r < 0) log_unit_debug_errno(u, r, "Failed to determine whether cgroup %s is empty: %m", empty_to_root(crt->cgroup_path)); return r; @@ -3033,7 +3033,6 @@ int unit_check_oom(Unit *u) { if (ctx->memory_oom_group) { r = cg_get_keyed_attribute( - "memory", crt->cgroup_path, "memory.events.local", STRV_MAKE("oom_group_kill"), @@ -3044,7 +3043,6 @@ int unit_check_oom(Unit *u) { if (isempty(oom_kill)) { r = cg_get_keyed_attribute( - "memory", crt->cgroup_path, "memory.events", STRV_MAKE("oom_kill"), @@ -3156,7 +3154,6 @@ static int unit_check_cgroup_events(Unit *u) { return 0; r = cg_get_keyed_attribute( - SYSTEMD_CGROUP_CONTROLLER, crt->cgroup_path, "cgroup.events", STRV_MAKE("populated", "frozen"), @@ -3601,7 +3598,7 @@ static int unit_get_cpu_usage_raw(const Unit *u, const CGroupRuntime *crt, nsec_ _cleanup_free_ char *val = NULL; uint64_t us; - r = cg_get_keyed_attribute("cpu", crt->cgroup_path, "cpu.stat", STRV_MAKE("usage_usec"), &val); + r = cg_get_keyed_attribute(crt->cgroup_path, "cpu.stat", STRV_MAKE("usage_usec"), &val); if (r < 0) return r; @@ -4037,7 +4034,6 @@ static int unit_cgroup_freezer_kernel_state(Unit *u, FreezerState *ret) { return -EOWNERDEAD; r = cg_get_keyed_attribute( - SYSTEMD_CGROUP_CONTROLLER, crt->cgroup_path, "cgroup.events", STRV_MAKE("frozen"), diff --git a/src/core/service.c b/src/core/service.c index c92fb450857..59a81028e61 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -2015,7 +2015,7 @@ static int cgroup_good(Service *s) { if (!s->cgroup_runtime || !s->cgroup_runtime->cgroup_path) return 0; - r = cg_is_empty(SYSTEMD_CGROUP_CONTROLLER, s->cgroup_runtime->cgroup_path); + r = cg_is_empty(s->cgroup_runtime->cgroup_path); if (r < 0) return r; diff --git a/src/login/loginctl.c b/src/login/loginctl.c index 1a5cbb45e1c..fa406cfd74f 100644 --- a/src/login/loginctl.c +++ b/src/login/loginctl.c @@ -457,7 +457,7 @@ static int show_unit_cgroup( /* Fallback for older systemd versions where the GetUnitProcesses() call is not yet available */ - if (cg_is_empty(SYSTEMD_CGROUP_CONTROLLER, cgroup) != 0 && leader <= 0) + if (cg_is_empty(cgroup) != 0 && leader <= 0) return 0; show_cgroup_and_extra(cgroup, prefix, c, &leader, leader > 0, get_output_flags()); diff --git a/src/machine/machine.c b/src/machine/machine.c index f097bfe3801..0eb854f4abd 100644 --- a/src/machine/machine.c +++ b/src/machine/machine.c @@ -596,7 +596,7 @@ static int machine_dispatch_cgroup_empty(sd_event_source *s, const struct inotif assert(m->cgroup); - r = cg_is_empty(SYSTEMD_CGROUP_CONTROLLER, m->cgroup); + r = cg_is_empty(m->cgroup); if (r < 0) return log_error_errno(r, "Failed to determine if cgroup '%s' is empty: %m", m->cgroup); @@ -782,7 +782,7 @@ bool machine_may_gc(Machine *m, bool drop_not_started) { } if (m->cgroup) { - r = cg_is_empty(SYSTEMD_CGROUP_CONTROLLER, m->cgroup); + r = cg_is_empty(m->cgroup); if (IN_SET(r, 0, -ENOENT)) return true; if (r < 0) diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c index 1318f3c6f24..cf8f7d48b9f 100644 --- a/src/machine/machinectl.c +++ b/src/machine/machinectl.c @@ -452,7 +452,7 @@ static int show_unit_cgroup( /* Fallback for older systemd versions where the GetUnitProcesses() call is not yet available */ - if (cg_is_empty(SYSTEMD_CGROUP_CONTROLLER, cgroup) != 0 && leader <= 0) + if (cg_is_empty(cgroup) != 0 && leader <= 0) return 0; show_cgroup_and_extra(cgroup, "\t\t ", c, &leader, leader > 0, get_output_flags()); diff --git a/src/oom/oomd-util.c b/src/oom/oomd-util.c index b3cf917fcd5..fcd00f8c16b 100644 --- a/src/oom/oomd-util.c +++ b/src/oom/oomd-util.c @@ -451,7 +451,7 @@ int oomd_cgroup_context_acquire(const char *path, OomdCGroupContext **ret) { else if (r < 0) return log_debug_errno(r, "Error getting memory.swap.current from %s: %m", path); - r = cg_get_keyed_attribute(SYSTEMD_CGROUP_CONTROLLER, path, "memory.stat", STRV_MAKE("pgscan"), &val); + r = cg_get_keyed_attribute(path, "memory.stat", STRV_MAKE("pgscan"), &val); if (r < 0) return log_debug_errno(r, "Error getting pgscan from memory.stat under %s: %m", path); diff --git a/src/oom/test-oomd-util.c b/src/oom/test-oomd-util.c index abb5c2ccd8e..7e68525ba01 100644 --- a/src/oom/test-oomd-util.c +++ b/src/oom/test-oomd-util.c @@ -97,7 +97,7 @@ TEST(oomd_cgroup_kill) { bool empty = false; for (size_t t = 0; t < 100; t++) { usleep_safe(100 * USEC_PER_MSEC); - ASSERT_OK(r = cg_is_empty(SYSTEMD_CGROUP_CONTROLLER, subcgroup)); + ASSERT_OK(r = cg_is_empty(subcgroup)); if (r > 0) { empty = true; break; diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c index ea419fd5d01..6a591d7192a 100644 --- a/src/shared/cgroup-show.c +++ b/src/shared/cgroup-show.c @@ -254,7 +254,7 @@ int show_cgroup_by_path( if (!k) return -ENOMEM; - if (!(flags & OUTPUT_SHOW_ALL) && cg_is_empty(NULL, k) > 0) + if (!(flags & OUTPUT_SHOW_ALL) && cg_is_empty(path_startswith(k, "/sys/fs/cgroup/")) > 0) continue; if (!shown_pids) { diff --git a/src/test/test-cgroup-setup.c b/src/test/test-cgroup-setup.c index 195677bf0e0..5c162bbbf3a 100644 --- a/src/test/test-cgroup-setup.c +++ b/src/test/test-cgroup-setup.c @@ -59,10 +59,8 @@ TEST(cg_create) { ASSERT_TRUE(path_equal(path, strjoina("/sys/fs/cgroup", test_d))); free(path); - ASSERT_OK_POSITIVE(cg_is_empty(SYSTEMD_CGROUP_CONTROLLER, test_a)); - ASSERT_OK_ZERO(cg_is_empty(SYSTEMD_CGROUP_CONTROLLER, test_b)); - ASSERT_OK_POSITIVE(cg_is_empty(NULL, test_a)); - ASSERT_OK_POSITIVE(cg_is_empty(NULL, test_b)); + ASSERT_OK_POSITIVE(cg_is_empty(test_a)); + ASSERT_OK_ZERO(cg_is_empty(test_b)); ASSERT_OK_ZERO(cg_kill_recursive(test_a, 0, 0, NULL, NULL, NULL)); ASSERT_OK_POSITIVE(cg_kill_recursive(test_b, 0, 0, NULL, NULL, NULL)); diff --git a/src/test/test-cgroup-util.c b/src/test/test-cgroup-util.c index 823a4d403bc..bdc85adc895 100644 --- a/src/test/test-cgroup-util.c +++ b/src/test/test-cgroup-util.c @@ -436,7 +436,7 @@ TEST(cg_get_keyed_attribute) { if (cg_is_available() <= 0) return (void) log_tests_skipped("cgroupfs v2 is not mounted"); - r = cg_get_keyed_attribute("cpu", "/init.scope", "no_such_file", STRV_MAKE("no_such_attr"), &val); + r = cg_get_keyed_attribute("/init.scope", "no_such_file", STRV_MAKE("no_such_attr"), &val); if (ERRNO_IS_PRIVILEGE(r)) return (void) log_tests_skipped_errno(r, "/sys/fs/cgroup not accessible"); @@ -446,20 +446,20 @@ TEST(cg_get_keyed_attribute) { if (access("/sys/fs/cgroup/init.scope/cpu.stat", R_OK) < 0) return (void) log_tests_skipped_errno(errno, "/init.scope/cpu.stat not accessible"); - assert_se(cg_get_keyed_attribute("cpu", "/init.scope", "cpu.stat", STRV_MAKE("no_such_attr"), &val) == -ENXIO); + assert_se(cg_get_keyed_attribute("/init.scope", "cpu.stat", STRV_MAKE("no_such_attr"), &val) == -ENXIO); ASSERT_NULL(val); - assert_se(cg_get_keyed_attribute("cpu", "/init.scope", "cpu.stat", STRV_MAKE("usage_usec"), &val) == 0); + assert_se(cg_get_keyed_attribute("/init.scope", "cpu.stat", STRV_MAKE("usage_usec"), &val) == 0); val = mfree(val); - assert_se(cg_get_keyed_attribute("cpu", "/init.scope", "cpu.stat", STRV_MAKE("usage_usec", "no_such_attr"), vals3) == -ENXIO); + assert_se(cg_get_keyed_attribute("/init.scope", "cpu.stat", STRV_MAKE("usage_usec", "no_such_attr"), vals3) == -ENXIO); - assert_se(cg_get_keyed_attribute("cpu", "/init.scope", "cpu.stat", + assert_se(cg_get_keyed_attribute("/init.scope", "cpu.stat", STRV_MAKE("usage_usec", "user_usec", "system_usec"), vals3) == 0); for (size_t i = 0; i < 3; i++) free(vals3[i]); - assert_se(cg_get_keyed_attribute("cpu", "/init.scope", "cpu.stat", + assert_se(cg_get_keyed_attribute("/init.scope", "cpu.stat", STRV_MAKE("system_usec", "user_usec", "usage_usec"), vals3a) == 0); for (size_t i = 0; i < 3; i++) free(vals3a[i]); -- 2.47.3