aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Hubbs <w.d.hubbs@gmail.com>2021-02-23 23:08:56 -0600
committerWilliam Hubbs <w.d.hubbs@gmail.com>2021-02-23 23:08:56 -0600
commit4fb4674374931be2fa279692800185078f350d9f (patch)
treec20f81512c50856814d753a02db216ee2c06c525
parent0ddab761be249f54388c12f6cc8197dd01a63673 (diff)
fix unified cgroups v2 setup
The cgroups v2 setup required the rc_cgroups_controllers variable to be set to the list of controllers to enable regardless of whether the mode was hybrid or unified. This makes sense for hybrid mode since the controllers can't be in both the cgroups v1 and v2 hierarchies, but for unified mode we should enable all controllers that are configured in the kernel.
-rw-r--r--etc/rc.conf7
-rw-r--r--init.d/cgroups.in20
2 files changed, 17 insertions, 10 deletions
diff --git a/etc/rc.conf b/etc/rc.conf
index 123d58e6..895641db 100644
--- a/etc/rc.conf
+++ b/etc/rc.conf
@@ -198,10 +198,9 @@ rc_tty_number=12
# "unified" mounts cgroups version 2 on /sys/fs/cgroup
#rc_cgroup_mode="hybrid"
-# This is a list of controllers which should be enabled for cgroups version 2.
-# If hybrid mode is being used, controllers listed here will not be
-# available for cgroups version 1.
-# This is a global setting.
+# This is a list of controllers which should be enabled for cgroups version 2
+# when hybrid mode is being used.
+# Controllers listed here will not be available for cgroups version 1.
#rc_cgroup_controllers=""
# This variable contains the cgroups version 2 settings for your services.
diff --git a/init.d/cgroups.in b/init.d/cgroups.in
index 3d5bfa7b..c5399e37 100644
--- a/init.d/cgroups.in
+++ b/init.d/cgroups.in
@@ -83,14 +83,22 @@ cgroup2_controllers()
local active cgroup_path x y
cgroup_path="$(cgroup2_find_path)"
[ -z "${cgroup_path}" ] && return 0
- [ -e "${cgroup_path}/cgroup.controllers" ] &&
+ [ ! -e "${cgroup_path}/cgroup.controllers" ] && return 0
+ [ ! -e "${cgroup_path}/cgroup.subtree_control" ]&& return 0
read -r active < "${cgroup_path}/cgroup.controllers"
- for x in ${rc_cgroup_controllers}; do
- for y in ${active}; do
- [ "$x" = "$y" ] &&
- [ -e "${cgroup_path}/cgroup.subtree_control" ]&&
+ for x in ${active}; do
+ case "$rc_cgroup_mode" in
+ unified)
echo "+${x}" > "${cgroup_path}/cgroup.subtree_control"
- done
+ ;;
+ hybrid)
+ for y in ${rc_cgroup_controllers}; do
+ if [ "$x" = "$y" ]; then
+ echo "+${x}" > "${cgroup_path}/cgroup.subtree_control"
+ fi
+ done
+ ;;
+ esac
done
return 0
}