From 6925a0de4eaf181c08d7380249461abe5c42fe3f Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 17 Nov 2017 16:27:13 +0100 Subject: [PATCH] cgroup-util: move Set* allocation into cg_kernel_controllers() Previously, callers had to do this on their own. Let's make the call do that instead, making the caller code a bit shorter. --- src/basic/cgroup-util.c | 17 ++++++++++++++--- src/basic/cgroup-util.h | 2 +- src/core/mount-setup.c | 6 +----- src/nspawn/nspawn-mount.c | 6 +----- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c index cd32896b26..7a3a1b2b0e 100644 --- a/src/basic/cgroup-util.c +++ b/src/basic/cgroup-util.c @@ -2369,21 +2369,29 @@ int cg_mask_supported(CGroupMask *ret) { return 0; } -int cg_kernel_controllers(Set *controllers) { +int cg_kernel_controllers(Set **ret) { + _cleanup_set_free_free_ Set *controllers = NULL; _cleanup_fclose_ FILE *f = NULL; int r; - assert(controllers); + assert(ret); /* Determines the full list of kernel-known controllers. Might * include controllers we don't actually support, arbitrary * named hierarchies and controllers that aren't currently * accessible (because not mounted). */ + controllers = set_new(&string_hash_ops); + if (!controllers) + return -ENOMEM; + f = fopen("/proc/cgroups", "re"); if (!f) { - if (errno == ENOENT) + if (errno == ENOENT) { + *ret = NULL; return 0; + } + return -errno; } @@ -2421,6 +2429,9 @@ int cg_kernel_controllers(Set *controllers) { return r; } + *ret = controllers; + controllers = NULL; + return 0; } diff --git a/src/basic/cgroup-util.h b/src/basic/cgroup-util.h index df3d01e4ef..e286e4e9c2 100644 --- a/src/basic/cgroup-util.h +++ b/src/basic/cgroup-util.h @@ -243,7 +243,7 @@ int cg_mask_supported(CGroupMask *ret); int cg_mask_from_string(const char *s, CGroupMask *ret); int cg_mask_to_string(CGroupMask mask, char **ret); -int cg_kernel_controllers(Set *controllers); +int cg_kernel_controllers(Set **controllers); bool cg_ns_supported(void); diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c index 0054cf8ba3..adf20b68c7 100644 --- a/src/core/mount-setup.c +++ b/src/core/mount-setup.c @@ -237,11 +237,7 @@ int mount_cgroup_controllers(char ***join_controllers) { /* Mount all available cgroup controllers that are built into the kernel. */ - controllers = set_new(&string_hash_ops); - if (!controllers) - return log_oom(); - - r = cg_kernel_controllers(controllers); + r = cg_kernel_controllers(&controllers); if (r < 0) return log_error_errno(r, "Failed to enumerate cgroup controllers: %m"); diff --git a/src/nspawn/nspawn-mount.c b/src/nspawn/nspawn-mount.c index bfff53054c..9e6f573ae3 100644 --- a/src/nspawn/nspawn-mount.c +++ b/src/nspawn/nspawn-mount.c @@ -1111,11 +1111,7 @@ static int mount_legacy_cgns_unsupported( if (r > 0) goto skip_controllers; - controllers = set_new(&string_hash_ops); - if (!controllers) - return log_oom(); - - r = cg_kernel_controllers(controllers); + r = cg_kernel_controllers(&controllers); if (r < 0) return log_error_errno(r, "Failed to determine cgroup controllers: %m");