From: Christian Brauner Date: Sat, 7 Dec 2019 17:12:30 +0000 (+0100) Subject: cgroups/cgfsng: rework cgfsng_monitor_create() X-Git-Tag: lxc-4.0.0~78^2~22 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0d66e29ae61eb183a10343f6e74dbdda6a770dba;p=thirdparty%2Flxc.git cgroups/cgfsng: rework cgfsng_monitor_create() Signed-off-by: Christian Brauner --- diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c index 2549ca628..aa90842ff 100644 --- a/src/lxc/cgroups/cgfsng.c +++ b/src/lxc/cgroups/cgfsng.c @@ -1303,14 +1303,22 @@ __cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, char *offset, *tmp; int i, idx = 0; size_t len; - struct lxc_conf *conf = handler->conf; + struct lxc_conf *conf; - if (!conf) - return false; + if (!ops) + return ret_set_errno(false, ENOENT); if (!ops->hierarchies) return true; + if (ops->monitor_cgroup) + return ret_set_errno(false, EEXIST); + + if (!handler || !handler->conf) + return ret_set_errno(false, EINVAL); + + conf = handler->conf; + if (conf->cgroup_meta.dir) tmp = lxc_string_join("/", (const char *[]){conf->cgroup_meta.dir, @@ -1320,7 +1328,7 @@ __cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, else tmp = must_make_path(ops->monitor_pattern, handler->name, NULL); if (!tmp) - return false; + return ret_set_errno(false, ENOMEM); len = strlen(tmp) + 5; /* leave room for -NNN\0 */ monitor_cgroup = must_realloc(tmp, len); @@ -1328,11 +1336,8 @@ __cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, *offset = 0; do { - if (idx) { - int ret = snprintf(offset, 5, "-%d", idx); - if (ret < 0 || (size_t)ret >= 5) - return false; - } + if (idx) + sprintf(offset, "-%d", idx); for (i = 0; ops->hierarchies[i]; i++) { if (!monitor_create_path_for_hierarchy(ops->hierarchies[i], @@ -1351,11 +1356,10 @@ __cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, } while (ops->hierarchies[i] && idx > 0 && idx < 1000); if (idx == 1000) - return false; + return ret_set_errno(false, ERANGE); - INFO("The monitor process uses \"%s\" as cgroup", monitor_cgroup); ops->monitor_cgroup = move_ptr(monitor_cgroup); - return true; + return log_info(true, "The monitor process uses \"%s\" as cgroup", monitor_cgroup); } /* Try to create the same cgroup in all hierarchies. Start with cgroup_pattern; diff --git a/src/lxc/log.h b/src/lxc/log.h index 1d5d444b4..5305d55b6 100644 --- a/src/lxc/log.h +++ b/src/lxc/log.h @@ -512,7 +512,7 @@ __unused static inline void LXC_##LEVEL(struct lxc_log_locinfo* locinfo, \ #define log_debug_errno(__ret__, __errno__, format, ...) \ ({ \ - errno = __errno__; \ + errno = __errno__; \ SYSDEBUG(format, ##__VA_ARGS__); \ __ret__; \ }) @@ -523,6 +523,12 @@ __unused static inline void LXC_##LEVEL(struct lxc_log_locinfo* locinfo, \ __ret__; \ }) +#define log_info(__ret__, format, ...) \ + ({ \ + INFO(format, ##__VA_ARGS__); \ + __ret__; \ + }) + extern int lxc_log_fd; extern int lxc_log_syslog(int facility);