summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nspawn/nspawn-cgroup.c45
-rw-r--r--src/nspawn/nspawn-cgroup.h1
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);