cgroup: add proper API to determine whether our unit manags to root cgroup

This commit is contained in:
Lennart Poettering
2018-01-22 16:26:55 +01:00
parent 1e7da35be6
commit f3725e64fe
2 changed files with 21 additions and 11 deletions
+19 -11
View File
@@ -39,6 +39,18 @@
#define CGROUP_CPU_QUOTA_PERIOD_USEC ((usec_t) 100 * USEC_PER_MSEC)
bool unit_has_root_cgroup(Unit *u) {
assert(u);
/* Returns whether this unit manages the root cgroup. Note that this is different from being named "-.slice",
* as inside of containers the root slice won't be identical to the root cgroup. */
if (!u->cgroup_path)
return false;
return isempty(u->cgroup_path) || path_equal(u->cgroup_path, "/");
}
static void cgroup_compat_warn(void) {
static bool cgroup_compat_warned = false;
@@ -708,21 +720,17 @@ static void cgroup_context_apply(
assert(u);
c = unit_get_cgroup_context(u);
path = u->cgroup_path;
assert(c);
assert(path);
/* Nothing to do? Exit early! */
if (apply_mask == 0 && !apply_bpf)
return;
/* Some cgroup attributes are not supported on the root cgroup,
* hence silently ignore */
is_root = isempty(path) || path_equal(path, "/");
if (is_root)
/* Make sure we don't try to display messages with an empty path. */
/* Some cgroup attributes are not supported on the root cgroup, hence silently ignore */
is_root = unit_has_root_cgroup(u);
assert_se(c = unit_get_cgroup_context(u));
assert_se(path = u->cgroup_path);
if (is_root) /* Make sure we don't try to display messages with an empty path. */
path = "/";
/* We generally ignore errors caused by read-only mounted
+2
View File
@@ -206,6 +206,8 @@ int unit_reset_ip_accounting(Unit *u);
cc ? cc->name : false; \
})
bool unit_has_root_cgroup(Unit *u);
int manager_notify_cgroup_empty(Manager *m, const char *group);
void unit_invalidate_cgroup(Unit *u, CGroupMask m);