From 602bdd5a20338e9be3e91540e1e3bfa47becaeb8 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Mon, 7 Aug 2017 18:32:42 -0400 Subject: nspawn: Split off cgroup_decide_mounts() from mount_cgroups() --- src/nspawn/nspawn-cgroup.c | 45 ++++++++++++++++++++++++++------------------- src/nspawn/nspawn-cgroup.h | 1 + 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/nspawn/nspawn-cgroup.c b/src/nspawn/nspawn-cgroup.c index 7e15cf5391..f63827188b 100644 --- a/src/nspawn/nspawn-cgroup.c +++ b/src/nspawn/nspawn-cgroup.c @@ -488,6 +488,29 @@ skip_controllers: return 0; } +int cgroup_decide_mounts( + CGMounts *ret_mounts, + CGroupUnified outer_cgver, CGroupUnified inner_cgver, + bool use_cgns) { + + switch (inner_cgver) { + default: + case CGROUP_UNIFIED_UNKNOWN: + assert_not_reached("unknown inner_cgver"); + case CGROUP_UNIFIED_NONE: + case CGROUP_UNIFIED_SYSTEMD232: + case CGROUP_UNIFIED_SYSTEMD233: + if (use_cgns) + return cgroup_decide_mounts_sd_y_cgns(ret_mounts, outer_cgver, inner_cgver); + else + return cgroup_decide_mounts_sd_n_cgns(ret_mounts, outer_cgver, inner_cgver); + case CGROUP_UNIFIED_ALL: + if (!cgmount_add(ret_mounts, CGMOUNT_CGROUP2, "cgroup", "")) + return log_oom(); + return 0; + } +} + /* cgroup_mount_mounts **********************************************/ static int cgroup_mount_cg( @@ -611,25 +634,9 @@ int mount_cgroups( _cleanup_(cgroup_free_mounts) CGMounts mounts = {}; int r; - switch (inner_cgver) { - default: - case CGROUP_UNIFIED_UNKNOWN: - assert_not_reached("unknown inner_cgver"); - case CGROUP_UNIFIED_NONE: - case CGROUP_UNIFIED_SYSTEMD232: - case CGROUP_UNIFIED_SYSTEMD233: - if (use_cgns) - r = cgroup_decide_mounts_sd_y_cgns(&mounts, outer_cgver, inner_cgver); - else - r = cgroup_decide_mounts_sd_n_cgns(&mounts, outer_cgver, inner_cgver); - if (r < 0) - return r; - break; - case CGROUP_UNIFIED_ALL: - if (!cgmount_add(&mounts, CGMOUNT_CGROUP2, "cgroup", "")) - return log_oom(); - break; - } + r = cgroup_decide_mounts(&mounts, outer_cgver, inner_cgver, use_cgns); + if (r < 0) + return r; return cgroup_mount_mounts(dest, mounts, use_cgns, use_userns ? uid_shift : UID_INVALID, selinux_apifs_context); } diff --git a/src/nspawn/nspawn-cgroup.h b/src/nspawn/nspawn-cgroup.h index 6f6d40fc40..f066ca33a9 100644 --- a/src/nspawn/nspawn-cgroup.h +++ b/src/nspawn/nspawn-cgroup.h @@ -13,6 +13,7 @@ typedef struct CGMounts { } CGMounts; int cgroup_setup(pid_t pid, CGroupUnified outer_cgver, CGroupUnified inner_cgver, uid_t uid_shift, bool keep_unit); +int cgroup_decide_mounts(CGMounts *ret_mounts, CGroupUnified outer_cgver, CGroupUnified inner_cgver, bool use_cgns); int cgroup_mount_mounts(const char *dest, CGMounts mounts, bool use_cgns, uid_t uid_shift, const char *selinux_apifs_context); void cgroup_free_mounts(CGMounts *mounts); -- cgit v1.2.2