The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxcfs/pull/357
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) === Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
From 359260f721171b816e44bf37bb4cf47d1b05f4b3 Mon Sep 17 00:00:00 2001 From: Christian Brauner <christian.brau...@ubuntu.com> Date: Thu, 5 Mar 2020 23:31:24 +0100 Subject: [PATCH 1/5] tree-wide: fix cpuview virtualisation Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com> --- src/cgroups/cgroup_utils.h | 4 +++- src/proc_cpuview.c | 5 +++-- src/proc_fuse.c | 9 +++++---- src/proc_loadavg.h | 8 ++++---- src/sysfs_fuse.c | 6 +++++- 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/cgroups/cgroup_utils.h b/src/cgroups/cgroup_utils.h index b70e8f7..483ef49 100644 --- a/src/cgroups/cgroup_utils.h +++ b/src/cgroups/cgroup_utils.h @@ -97,7 +97,9 @@ static inline int openat_safe(int fd, const char *path) static inline const char *dot_or_empty(const char *s) { - return (*s == '/') ? (const char *){"."} : (const char *){""}; + static const char *dot = "."; + static const char *empty = ""; + return (*s == '/') ? dot : empty; } #endif /* __LXC_CGROUP_UTILS_H */ diff --git a/src/proc_cpuview.c b/src/proc_cpuview.c index 3c56d90..e274827 100644 --- a/src/proc_cpuview.c +++ b/src/proc_cpuview.c @@ -874,9 +874,10 @@ int proc_cpuinfo_read(char *buf, size_t size, off_t offset, if (!cpuset) return 0; - if (cgroup_ops->can_use_cpuview(cgroup_ops) && (opts && opts->use_cfs)) + if (cgroup_ops->can_use_cpuview(cgroup_ops) && opts && opts->use_cfs) use_view = true; - + else + use_view = false; if (use_view) max_cpus = max_cpu_count(cg); diff --git a/src/proc_fuse.c b/src/proc_fuse.c index d713693..5202c33 100644 --- a/src/proc_fuse.c +++ b/src/proc_fuse.c @@ -735,6 +735,7 @@ static int proc_stat_read(char *buf, size_t size, off_t offset, __do_free struct cpuacct_usage *cg_cpu_usage = NULL; __do_fclose FILE *f = NULL; struct fuse_context *fc = fuse_get_context(); + struct lxcfs_opts *opts = (struct lxcfs_opts *)fc->private_data; struct file_info *d = INTTYPE_TO_PTR(fi->fh); size_t linelen = 0, total_len = 0; int curcpu = -1; /* cpu numbering starts at 0 */ @@ -803,10 +804,10 @@ static int proc_stat_read(char *buf, size_t size, off_t offset, if (getline(&line, &linelen, f) < 0) return log_error(0, "proc_stat_read read first line failed"); - if (cgroup_ops->can_use_cpuview(cgroup_ops) && cg_cpu_usage) { - total_len = cpuview_proc_stat(cg, cpuset, cg_cpu_usage, cg_cpu_usage_size, - f, d->buf, d->buflen); - goto out; + if (cgroup_ops->can_use_cpuview(cgroup_ops) && opts && opts->use_cfs) { + total_len = cpuview_proc_stat(cg, cpuset, cg_cpu_usage, + cg_cpu_usage_size, f, d->buf, d->buflen); + goto out: } while (getline(&line, &linelen, f) != -1) { diff --git a/src/proc_loadavg.h b/src/proc_loadavg.h index fb12b6c..34b61ba 100644 --- a/src/proc_loadavg.h +++ b/src/proc_loadavg.h @@ -23,10 +23,10 @@ #include "config.h" #include "macro.h" -extern int proc_loadavg_read(char *buf, size_t size, off_t offset, - struct fuse_file_info *fi); -extern pthread_t load_daemon(int load_use); -extern int stop_load_daemon(pthread_t pid); +__visible extern pthread_t load_daemon(int load_use); +__visible extern int stop_load_daemon(pthread_t pid); + +extern int proc_loadavg_read(char *buf, size_t size, off_t offset, struct fuse_file_info *fi); extern int calc_hash(const char *name); #endif /* __LXCFS_PROC_LOADAVG_FUSE_H */ diff --git a/src/sysfs_fuse.c b/src/sysfs_fuse.c index 4b71633..3114e4f 100644 --- a/src/sysfs_fuse.c +++ b/src/sysfs_fuse.c @@ -51,6 +51,7 @@ static int sys_devices_system_cpu_online_read(char *buf, size_t size, { __do_free char *cg = NULL, *cpuset = NULL; struct fuse_context *fc = fuse_get_context(); + struct lxcfs_opts *opts = (struct lxcfs_opts *)fc->private_data; struct file_info *d = INTTYPE_TO_PTR(fi->fh); char *cache = d->buf; bool use_view; @@ -88,7 +89,10 @@ static int sys_devices_system_cpu_online_read(char *buf, size_t size, if (!cpuset) return 0; - use_view = cgroup_ops->can_use_cpuview(cgroup_ops); + if (cgroup_ops->can_use_cpuview(cgroup_ops) && opts && opts->use_cfs) + use_view = true; + else + use_view = false; if (use_view) max_cpus = max_cpu_count(cg); From a06a1b3f52ad60bf9e171385c0910b5c789486bb Mon Sep 17 00:00:00 2001 From: Christian Brauner <christian.brau...@ubuntu.com> Date: Thu, 5 Mar 2020 23:41:02 +0100 Subject: [PATCH 2/5] macro: fix log_debug() Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com> --- src/macro.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/macro.h b/src/macro.h index 67be461..ce08510 100644 --- a/src/macro.h +++ b/src/macro.h @@ -107,10 +107,10 @@ }) #ifdef DEBUG -#define log_debug(__ret__, format, ...) \ - ({ \ - lxcfs_debug_stream(format, ##__VA_ARGS__); \ - __ret__; \ +#define log_debug(__ret__, format, ...) \ + ({ \ + lxcfs_debug_stream(stderr, format, ##__VA_ARGS__); \ + __ret__; \ }) #else #define log_debug(__ret__, format, ...) ({ __ret__; }) From ec1aee62f5e6ab969ca01dd4d5b6944e691b0cb0 Mon Sep 17 00:00:00 2001 From: Christian Brauner <christian.brau...@ubuntu.com> Date: Thu, 5 Mar 2020 23:41:27 +0100 Subject: [PATCH 3/5] proc_cpuview: fix whitespace error Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com> --- src/proc_cpuview.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/proc_cpuview.c b/src/proc_cpuview.c index e274827..fece471 100644 --- a/src/proc_cpuview.c +++ b/src/proc_cpuview.c @@ -331,7 +331,6 @@ static struct cg_proc_stat *find_or_create_proc_stat_node(struct cpuacct_usage * struct cg_proc_stat *node; node = find_proc_stat_node(head, cg); - if (!node) { node = new_proc_stat_node(usage, cpu_count, cg); if (!node) From 2edb5735566d6b81acdcda5e6344a29b8bb79c2f Mon Sep 17 00:00:00 2001 From: Christian Brauner <christian.brau...@ubuntu.com> Date: Thu, 5 Mar 2020 23:46:25 +0100 Subject: [PATCH 4/5] proc_cpuview: ensure NULL Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com> --- src/proc_cpuview.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/proc_cpuview.c b/src/proc_cpuview.c index fece471..4fa6306 100644 --- a/src/proc_cpuview.c +++ b/src/proc_cpuview.c @@ -243,7 +243,7 @@ static bool cgfs_param_exist(const char *controller, const char *cgroup, if (cfd < 0) return false; - path = must_make_path(dot_or_empty(cgroup), cgroup, file); + path = must_make_path(dot_or_empty(cgroup), cgroup, file, NULL); return (faccessat(cfd, path, F_OK, 0) == 0); } From 107095347067bd279c1a3df857ff87233878d096 Mon Sep 17 00:00:00 2001 From: Christian Brauner <christian.brau...@ubuntu.com> Date: Thu, 5 Mar 2020 23:51:37 +0100 Subject: [PATCH 5/5] proc_fuse: fix identation Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com> --- src/proc_fuse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/proc_fuse.c b/src/proc_fuse.c index 5202c33..1753442 100644 --- a/src/proc_fuse.c +++ b/src/proc_fuse.c @@ -777,7 +777,7 @@ static int proc_stat_read(char *buf, size_t size, off_t offset, * in some case cpuacct_usage.all in "/" will larger then /proc/stat */ if (initpid == 1) - return read_file_fuse("/proc/stat", buf, size, d); + return read_file_fuse("/proc/stat", buf, size, d); cg = get_pid_cgroup(initpid, "cpuset"); if (!cg)
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel