diff options
author | 2018-12-21 19:48:51 +0100 | |
---|---|---|
committer | 2018-12-21 19:48:51 +0100 | |
commit | 9d6e839ed8b2fb5e611864f6ed5d278c5222c270 (patch) | |
tree | 9e63144b38b772a21db5e137ff21b8319fa3a805 | |
parent | sd-device: ignore bind/unbind events for now (diff) | |
parent | cgroup: Add NEWS entry for cgroup_no_v1=all implying unified usage (diff) | |
download | systemd-9d6e839ed8b2fb5e611864f6ed5d278c5222c270.tar.gz systemd-9d6e839ed8b2fb5e611864f6ed5d278c5222c270.tar.bz2 systemd-9d6e839ed8b2fb5e611864f6ed5d278c5222c270.zip |
Merge pull request #11206 from cdown/cgroup_no_v1
cgroup: Imply systemd.unified_cgroup_hierarchy=1 on cgroup_no_v1=all
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | src/basic/cgroup-util.c | 15 | ||||
-rw-r--r-- | src/test/test-cgroup-util.c | 11 |
3 files changed, 27 insertions, 3 deletions
@@ -127,6 +127,10 @@ CHANGES WITH 240 in spe: * Support for disabling a particular cgroup controller within a sub-tree has been added through the DisableControllers= directive. + * cgroup_no_v1=all on the kernel command line now also implies + using the unified cgroup hierarchy, unless one explicitly passes + systemd.unified_cgroup_hierarchy=0 on the kernel command line. + * The new "MemoryMin=" unit file property may now be used to set the memory usage protection limit of processes invoked by the unit. This controls the cgroupsv2 memory.min attribute. Similarly, the new diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c index ec29a6f4c..830a63c18 100644 --- a/src/basic/cgroup-util.c +++ b/src/basic/cgroup-util.c @@ -2706,6 +2706,7 @@ bool cg_is_unified_wanted(void) { int r; bool b; const bool is_default = DEFAULT_HIERARCHY == CGROUP_UNIFIED_ALL; + _cleanup_free_ char *c = NULL; /* If we have a cached value, return that. */ if (wanted >= 0) @@ -2716,11 +2717,19 @@ bool cg_is_unified_wanted(void) { if (cg_unified_flush() >= 0) return (wanted = unified_cache >= CGROUP_UNIFIED_ALL); - /* Otherwise, let's see what the kernel command line has to say. - * Since checking is expensive, cache a non-error result. */ + /* If we were explicitly passed systemd.unified_cgroup_hierarchy, + * respect that. */ r = proc_cmdline_get_bool("systemd.unified_cgroup_hierarchy", &b); + if (r > 0) + return (wanted = b); + + /* If we passed cgroup_no_v1=all with no other instructions, it seems + * highly unlikely that we want to use hybrid or legacy hierarchy. */ + r = proc_cmdline_get_key("cgroup_no_v1", 0, &c); + if (r > 0 && streq_ptr(c, "all")) + return (wanted = true); - return (wanted = r > 0 ? b : is_default); + return (wanted = is_default); } bool cg_is_legacy_wanted(void) { diff --git a/src/test/test-cgroup-util.c b/src/test/test-cgroup-util.c index 058cc44c4..a3239d73f 100644 --- a/src/test/test-cgroup-util.c +++ b/src/test/test-cgroup-util.c @@ -369,6 +369,17 @@ static void test_is_wanted(void) { "systemd.unified_cgroup_hierarchy=0 " "systemd.legacy_systemd_cgroup_controller=0", 1) >= 0); test_is_wanted_print(false); + + /* cgroup_no_v1=all implies unified cgroup hierarchy, unless otherwise + * explicitly specified. */ + assert_se(setenv("SYSTEMD_PROC_CMDLINE", + "cgroup_no_v1=all", 1) >= 0); + test_is_wanted_print(false); + + assert_se(setenv("SYSTEMD_PROC_CMDLINE", + "cgroup_no_v1=all " + "systemd.unified_cgroup_hierarchy=0", 1) >= 0); + test_is_wanted_print(false); } static void test_cg_tests(void) { |