summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@parabola.nu>2017-07-17 21:25:11 -0400
committerLuke Shumaker <lukeshu@parabola.nu>2018-08-16 21:55:16 -0400
commitaa4ec7c7ad44dcfb26ccf2cfc01bf3a2ad4b4a0c (patch)
treeb526cb32cf07e06e112f0019fc4ce1f2c9ee5849
parent043757d17d2615f6579a93682361aa9a3ac18d80 (diff)
nspawn: Allow the container to inherit a 232-style hybrid (#6310)
-rw-r--r--src/nspawn/nspawn-cgroup.c10
-rw-r--r--src/nspawn/nspawn.c13
2 files changed, 19 insertions, 4 deletions
diff --git a/src/nspawn/nspawn-cgroup.c b/src/nspawn/nspawn-cgroup.c
index 554253d555..9b8f8f4e22 100644
--- a/src/nspawn/nspawn-cgroup.c
+++ b/src/nspawn/nspawn-cgroup.c
@@ -391,7 +391,10 @@ skip_controllers:
case CGROUP_UNIFIED_ALL:
assert_not_reached("cgroup v2 requested in cgroup v1 function");
case CGROUP_UNIFIED_SYSTEMD232:
- assert_not_reached("systemd 232-style hybrid not supported");
+ r = mount_legacy_cgroup_hierarchy("", SYSTEMD_CGROUP_CONTROLLER_HYBRID, "systemd", false);
+ if (r < 0)
+ return r;
+ break;
case CGROUP_UNIFIED_SYSTEMD233:
r = mount_legacy_cgroup_hierarchy("", SYSTEMD_CGROUP_CONTROLLER_HYBRID, "unified", false);
if (r < 0)
@@ -511,7 +514,10 @@ skip_controllers:
case CGROUP_UNIFIED_ALL:
assert_not_reached("cgroup v2 requested in cgroup v1 function");
case CGROUP_UNIFIED_SYSTEMD232:
- assert_not_reached("systemd 232-style hybrid not supported");
+ r = mount_legacy_cgroup_hierarchy(dest, SYSTEMD_CGROUP_CONTROLLER_HYBRID, "systemd", false);
+ if (r < 0)
+ return r;
+ break;
case CGROUP_UNIFIED_SYSTEMD233:
r = mount_legacy_cgroup_hierarchy(dest, SYSTEMD_CGROUP_CONTROLLER_HYBRID, "unified", false);
if (r < 0)
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index fc6cb60e94..96ea27e57c 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -367,8 +367,7 @@ static int detect_inner_cgver_from_image(const char *directory) {
arg_inner_cgver = CGROUP_UNIFIED_NONE;
break;
case CGROUP_UNIFIED_SYSTEMD233:
- case CGROUP_UNIFIED_SYSTEMD232:
- /* Mixed cgroup hierarchy support was added in 233 */
+ /* systemd v233+ -style mixed cgroup hierarchy */
r = systemd_installation_has_version(directory, 233);
if (r < 0)
return log_error_errno(r, "Failed to determine systemd version in container: %m");
@@ -377,6 +376,16 @@ static int detect_inner_cgver_from_image(const char *directory) {
else
arg_inner_cgver = CGROUP_UNIFIED_NONE;
break;
+ case CGROUP_UNIFIED_SYSTEMD232:
+ /* systemd v232 -style mixed cgroup hierarchy */
+ r = systemd_installation_has_version(directory, 232);
+ if (r < 0)
+ return log_error_errno(r, "Failed to decide cgroup version to use: Failed to determine systemd version in container: %m");
+ if (r > 0)
+ arg_inner_cgver = CGROUP_UNIFIED_SYSTEMD232;
+ else
+ arg_inner_cgver = CGROUP_UNIFIED_NONE;
+ break;
case CGROUP_UNIFIED_NONE:
arg_inner_cgver = CGROUP_UNIFIED_NONE;
break;