The argument is completely unused. Let's drop it.
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;
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)
}
int cg_get_keyed_attribute(
- const char *controller,
const char *path,
const char *attribute,
char * const *keys,
*
* 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;
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);
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);
_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)
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;
if (ctx->memory_oom_group) {
r = cg_get_keyed_attribute(
- "memory",
crt->cgroup_path,
"memory.events.local",
STRV_MAKE("oom_group_kill"),
if (isempty(oom_kill)) {
r = cg_get_keyed_attribute(
- "memory",
crt->cgroup_path,
"memory.events",
STRV_MAKE("oom_kill"),
return 0;
r = cg_get_keyed_attribute(
- SYSTEMD_CGROUP_CONTROLLER,
crt->cgroup_path,
"cgroup.events",
STRV_MAKE("populated", "frozen"),
_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;
return -EOWNERDEAD;
r = cg_get_keyed_attribute(
- SYSTEMD_CGROUP_CONTROLLER,
crt->cgroup_path,
"cgroup.events",
STRV_MAKE("frozen"),
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;
/* 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());
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);
}
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)
/* 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());
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);
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;
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) {
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));
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");
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]);