[lxc-devel] [lxcfs/master] fixes

brauner on Github lxc-bot at linuxcontainers.org
Thu Mar 5 22:53:53 UTC 2020


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 365 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200305/f457db0d/attachment.bin>
-------------- next part --------------
From 359260f721171b816e44bf37bb4cf47d1b05f4b3 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at 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.brauner at 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.brauner at 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.brauner at 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.brauner at 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.brauner at 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.brauner at 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.brauner at 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.brauner at 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.brauner at 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)


More information about the lxc-devel mailing list