From: Christian Brauner Date: Sun, 21 Feb 2021 13:32:56 +0000 (+0100) Subject: cgroups: improve utility controller handling X-Git-Tag: lxc-5.0.0~274^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ca72ccb50fe0657a671f72ba8864ac4d46616bfc;p=thirdparty%2Flxc.git cgroups: improve utility controller handling Signed-off-by: Christian Brauner --- diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c index 4a809e5ac..71bee9de9 100644 --- a/src/lxc/cgroups/cgfsng.c +++ b/src/lxc/cgroups/cgfsng.c @@ -123,12 +123,12 @@ static struct hierarchy *get_hierarchy(struct cgroup_ops *ops, const char *contr */ if (pure_unified_layout(ops)) { if (strequal(controller, "devices")) { - if (ops->unified->bpf_device_controller) + if (device_utility_controller(ops->unified)) return ops->unified; break; } else if (strequal(controller, "freezer")) { - if (ops->unified->freezer_controller) + if (freezer_utility_controller(ops->unified)) return ops->unified; break; @@ -1402,7 +1402,7 @@ __cgfsng_ops static void cgfsng_payload_finalize(struct cgroup_ops *ops) !faccessat(ops->unified->dfd_con, "cgroup.freeze", F_OK, AT_SYMLINK_NOFOLLOW)) { TRACE("Unified hierarchy supports freezer"); - ops->unified->freezer_controller = 1; + ops->unified->utilities |= FREEZER_CONTROLLER; } } @@ -2838,7 +2838,7 @@ __cgfsng_ops static bool cgfsng_devices_activate(struct cgroup_ops *ops, struct conf = handler->conf; unified = ops->unified; - if (!unified || !unified->bpf_device_controller || + if (!unified || !device_utility_controller(unified) || !unified->path_con || lxc_list_empty(&(conf->bpf_devices).device_item)) return true; @@ -3222,7 +3222,7 @@ static int __initialize_cgroups(struct cgroup_ops *ops, bool relative, ops->cgroup_layout = CGROUP_LAYOUT_HYBRID; } else { if (bpf_devices_cgroup_supported()) - ops->unified->bpf_device_controller = 1; + ops->unified->utilities |= DEVICES_CONTROLLER; ops->cgroup_layout = CGROUP_LAYOUT_UNIFIED; } } diff --git a/src/lxc/cgroups/cgroup.h b/src/lxc/cgroups/cgroup.h index 28db9e97b..85ffb260d 100644 --- a/src/lxc/cgroups/cgroup.h +++ b/src/lxc/cgroups/cgroup.h @@ -38,6 +38,9 @@ typedef enum { UNIFIED_HIERARCHY = CGROUP2_SUPER_MAGIC, } cgroupfs_type_magic_t; +#define DEVICES_CONTROLLER (1U << 0) +#define FREEZER_CONTROLLER (1U << 1) + /* A descriptor for a mounted hierarchy * * @controllers @@ -104,13 +107,26 @@ struct hierarchy { struct /* unified hierarchy specific */ { char **delegate; - unsigned int bpf_device_controller : 1; - unsigned int freezer_controller : 1; + unsigned int utilities; }; char **controllers; }; +static inline bool device_utility_controller(const struct hierarchy *h) +{ + if (h->fs_type == UNIFIED_HIERARCHY && (h->utilities & DEVICES_CONTROLLER)) + return true; + return false; +} + +static inline bool freezer_utility_controller(const struct hierarchy *h) +{ + if (h->fs_type == UNIFIED_HIERARCHY && (h->utilities & FREEZER_CONTROLLER)) + return true; + return false; +} + struct cgroup_ops { /* string constant */ const char *driver;