The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxc/pull/3271
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) === Link: https://discuss.linuxcontainers.org/t/lxc-cgroup-pattern-is-not-being-honored Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
From d6bdd1823a61c5b56c6ee9875b719c5b27096adb Mon Sep 17 00:00:00 2001 From: Christian Brauner <christian.brau...@ubuntu.com> Date: Thu, 27 Feb 2020 23:02:31 +0100 Subject: [PATCH] cgroups: honor lxc.cgroup.pattern if set explicitly II Link: https://discuss.linuxcontainers.org/t/lxc-cgroup-pattern-is-not-being-honored Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com> --- src/lxc/cgroups/cgfsng.c | 27 +++++++++++++++------------ src/lxc/cgroups/cgroup.h | 2 ++ src/lxc/initutils.c | 22 ++++++++-------------- 3 files changed, 25 insertions(+), 26 deletions(-) diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c index 5dfffcd92a..7677567cbf 100644 --- a/src/lxc/cgroups/cgfsng.c +++ b/src/lxc/cgroups/cgfsng.c @@ -1223,21 +1223,14 @@ static void cgroup_remove_leaf(struct hierarchy *h, bool payload) if (payload) { __lxc_unused __do_close_prot_errno int fd = move_fd(h->cgfd_con); - h->cgfd_con = -EBADF; - full_path = h->container_full_path; + full_path = move_ptr(h->container_full_path); } else { __lxc_unused __do_close_prot_errno int fd = move_fd(h->cgfd_mon); - h->cgfd_mon = -EBADF; - full_path = h->monitor_full_path; + full_path = move_ptr(h->monitor_full_path); } - if (rmdir(full_path)) + if (full_path && rmdir(full_path)) SYSWARN("Failed to rmdir(\"%s\") cgroup", full_path); - - if (payload) - h->container_full_path = NULL; - else - h->monitor_full_path = NULL; } __cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, @@ -1273,10 +1266,15 @@ __cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, CGROUP_CREATE_RETRY, NULL); } else if (ops->cgroup_pattern) { __cgroup_tree = lxc_string_replace("%n", handler->name, ops->cgroup_pattern); + if (!__cgroup_tree) + return ret_set_errno(false, ENOMEM); + cgroup_tree = __cgroup_tree; - monitor_cgroup = must_concat(&len, cgroup_tree, + monitor_cgroup = must_concat(&len, cgroup_tree, "/", + DEFAULT_MONITOR_CGROUP, CGROUP_CREATE_RETRY, NULL); } else { + cgroup_tree = NULL; monitor_cgroup = must_concat(&len, DEFAULT_MONITOR_CGROUP_PREFIX, handler->name, CGROUP_CREATE_RETRY, NULL); @@ -1347,10 +1345,15 @@ __cgfsng_ops static inline bool cgfsng_payload_create(struct cgroup_ops *ops, CGROUP_CREATE_RETRY, NULL); } else if (ops->cgroup_pattern) { __cgroup_tree = lxc_string_replace("%n", handler->name, ops->cgroup_pattern); + if (!__cgroup_tree) + return ret_set_errno(false, ENOMEM); + cgroup_tree = __cgroup_tree; - container_cgroup = must_concat(&len, cgroup_tree, + container_cgroup = must_concat(&len, cgroup_tree, "/", + DEFAULT_PAYLOAD_CGROUP, CGROUP_CREATE_RETRY, NULL); } else { + cgroup_tree = NULL; container_cgroup = must_concat(&len, DEFAULT_PAYLOAD_CGROUP_PREFIX, handler->name, CGROUP_CREATE_RETRY, NULL); diff --git a/src/lxc/cgroups/cgroup.h b/src/lxc/cgroups/cgroup.h index 32692fd711..309f31fae7 100644 --- a/src/lxc/cgroups/cgroup.h +++ b/src/lxc/cgroups/cgroup.h @@ -12,6 +12,8 @@ #define DEFAULT_CGROUP_MOUNTPOINT "/sys/fs/cgroup" #define DEFAULT_PAYLOAD_CGROUP_PREFIX "lxc.payload." #define DEFAULT_MONITOR_CGROUP_PREFIX "lxc.monitor." +#define DEFAULT_PAYLOAD_CGROUP "payload" +#define DEFAULT_MONITOR_CGROUP "monitor" #define CGROUP_CREATE_RETRY "-NNNN" #define CGROUP_CREATE_RETRY_LEN (STRLITERALLEN(CGROUP_CREATE_RETRY)) #define CGROUP_PIVOT "lxc.pivot" diff --git a/src/lxc/initutils.c b/src/lxc/initutils.c index e5d4523072..5549c2e8f7 100644 --- a/src/lxc/initutils.c +++ b/src/lxc/initutils.c @@ -169,8 +169,7 @@ const char *lxc_global_config_value(const char *option_name) free(user_lxc_path); user_lxc_path = copy_global_config_value(slider1); remove_trailing_slashes(user_lxc_path); - values[i] = user_lxc_path; - user_lxc_path = NULL; + values[i] = move_ptr(user_lxc_path); goto out; } @@ -182,19 +181,14 @@ const char *lxc_global_config_value(const char *option_name) /* could not find value, use default */ if (strcmp(option_name, "lxc.lxcpath") == 0) { remove_trailing_slashes(user_lxc_path); - values[i] = user_lxc_path; - user_lxc_path = NULL; - } - else if (strcmp(option_name, "lxc.default_config") == 0) { - values[i] = user_default_config_path; - user_default_config_path = NULL; - } - else if (strcmp(option_name, "lxc.cgroup.pattern") == 0) { - values[i] = user_cgroup_pattern; - user_cgroup_pattern = NULL; - } - else + values[i] = move_ptr(user_lxc_path); + } else if (strcmp(option_name, "lxc.default_config") == 0) { + values[i] = move_ptr(user_default_config_path); + } else if (strcmp(option_name, "lxc.cgroup.pattern") == 0) { + values[i] = move_ptr(user_cgroup_pattern); + } else { values[i] = (*ptr)[1]; + } /* special case: if default value is NULL, * and there is no config, don't view that
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel