diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2017-02-19 15:59:21 -0500 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2017-02-22 11:52:31 -0500 |
commit | 1b59cf04aee20525179f81928f1e1794ce970551 (patch) | |
tree | 4eedd6ff0980be83d54faa39e7b50e9779d2f98b /src | |
parent | a4464b952238cdcdab64f3dadb288700dcd25065 (diff) |
core/mount-setup: if unified hierarchy is not supported, fall back to legacy
We need this to gracefully support older or strangely configured kernels.
v2:
- do not install a callback handler, just embed the right conditions into
cg_is_*_wanted()
v3:
- fix bug in cg_is_legacy_wanted()
Diffstat (limited to 'src')
-rw-r--r-- | src/basic/cgroup-util.c | 14 | ||||
-rw-r--r-- | src/core/mount-setup.c | 2 |
2 files changed, 9 insertions, 7 deletions
diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c index 0b8bda89ea..8d60ded5fe 100644 --- a/src/basic/cgroup-util.c +++ b/src/basic/cgroup-util.c @@ -2429,7 +2429,14 @@ bool cg_is_unified_wanted(void) { } bool cg_is_legacy_wanted(void) { - return !cg_is_unified_wanted(); + /* Check if we have cgroups2 already mounted. */ + if (cg_unified_flush() >= 0 && + unified_cache == CGROUP_UNIFIED_ALL) + return false; + + /* Otherwise, assume that at least partial legacy is wanted, + * since cgroups2 should already be mounted at this point. */ + return true; } bool cg_is_hybrid_wanted(void) { @@ -2438,11 +2445,6 @@ bool cg_is_hybrid_wanted(void) { bool b; const bool is_default = DEFAULT_HIERARCHY == CGROUP_UNIFIED_SYSTEMD; - /* If the unified hierarchy is requested in full, no need to - * bother with this. */ - if (cg_is_unified_wanted()) - return 0; - /* If the hierarchy is already mounted, then follow whatever * was chosen for it. */ if (cg_unified_flush() >= 0) diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c index c107aa0a54..7295efbf31 100644 --- a/src/core/mount-setup.c +++ b/src/core/mount-setup.c @@ -96,7 +96,7 @@ static const MountPoint mount_table[] = { { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, NULL, MNT_FATAL|MNT_IN_CONTAINER }, { "cgroup", "/sys/fs/cgroup", "cgroup2", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, - cg_is_unified_wanted, MNT_FATAL|MNT_IN_CONTAINER }, + cg_is_unified_wanted, MNT_IN_CONTAINER }, { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, cg_is_legacy_wanted, MNT_FATAL|MNT_IN_CONTAINER }, { "cgroup", "/sys/fs/cgroup/unified", "cgroup2", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, |