From: Zbigniew Jędrzejewski-Szmek Date: Fri, 16 Feb 2018 09:17:46 +0000 (+0100) Subject: pid1: do not initialize join_controllers by default X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=ed5faeef2ccf4bc8343ec96c6115add96ded195c;p=elogind.git pid1: do not initialize join_controllers by default We're moving towards unified cgroup hierarchy where this is not necessary. This makes main.c a bit simpler. --- diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c index b35b90c36..cad593471 100644 --- a/src/core/mount-setup.c +++ b/src/core/mount-setup.c @@ -268,6 +268,19 @@ int mount_cgroup_controllers(char ***join_controllers) { /* Mount all available cgroup controllers that are built into the kernel. */ + if (!join_controllers) + /* The defaults: + * mount "cpu" + "cpuacct" together, and "net_cls" + "net_prio". + * + * We'd like to add "cpuset" to the mix, but "cpuset" doesn't really + * work for groups with no initialized attributes. + */ + join_controllers = (char**[]) { + STRV_MAKE("cpu", "cpuacct"), + STRV_MAKE("net_cls", "net_prio"), + NULL, + }; + r = cg_kernel_controllers(&controllers); if (r < 0) return log_error_errno(r, "Failed to enumerate cgroup controllers: %m"); @@ -286,10 +299,9 @@ int mount_cgroup_controllers(char ***join_controllers) { if (!controller) break; - if (join_controllers) - for (k = join_controllers; *k; k++) - if (strv_find(*k, controller)) - break; + for (k = join_controllers; *k; k++) + if (strv_find(*k, controller)) + break; if (k && *k) { char **i, **j; diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c index adb9ad4ed..3d12baf2d 100644 --- a/src/shared/conf-parser.c +++ b/src/shared/conf-parser.c @@ -1138,6 +1138,17 @@ int config_parse_join_controllers( if (!isempty(rvalue)) log_syntax(unit, LOG_ERR, filename, line, 0, "Trailing garbage, ignoring."); + /* As a special case, return a single empty strv, to override the default */ + if (!controllers) { + controllers = new(char**, 2); + if (!controllers) + return log_oom(); + controllers[0] = strv_new(NULL, NULL); + if (!controllers[0]) + return log_oom(); + controllers[1] = NULL; + } + strv_free_free(*ret); *ret = controllers; controllers = NULL; diff --git a/src/test/test-conf-parser.c b/src/test/test-conf-parser.c index fc6847954..30ca7a8e7 100644 --- a/src/test/test-conf-parser.c +++ b/src/test/test-conf-parser.c @@ -260,7 +260,9 @@ static void test_config_parse_join_controllers(void) { /* Test special case of no mounted controllers */ r = config_parse_join_controllers(NULL, "example.conf", 12, "Section", 10, "JoinControllers", 0, "", &c, NULL); assert_se(r == 0); - assert_se(c == NULL); + assert_se(c); + assert_se(strv_equal(c[0], STRV_MAKE_EMPTY)); + assert_se(c[1] == NULL); /* Test merging of overlapping lists */ r = config_parse_join_controllers(NULL, "example.conf", 13, "Section", 10, "JoinControllers", 0, "a,b b,c", &c, NULL);