cgroup-util: drop 'controller' argument from cg_get_keyed_attribute() and cg_is_empty()

The argument is completely unused. Let's drop it.
This commit is contained in:
Yu Watanabe
2025-08-30 08:29:37 +09:00
parent 3454b160e4
commit 5d397dc7f4
13 changed files with 24 additions and 31 deletions

View File

@@ -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;

View File

@@ -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);

View File

@@ -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)

View File

@@ -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"),

View File

@@ -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;

View File

@@ -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());

View File

@@ -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)

View File

@@ -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());

View File

@@ -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);

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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));

View File

@@ -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]);