The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxcfs/pull/327

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 df447840d75729bc1a582f29e934ed9a29fdd4af Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brau...@ubuntu.com>
Date: Wed, 26 Feb 2020 10:29:53 +0100
Subject: [PATCH] tree-wide: post-restructuring cleanup

Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
---
 Makefile.am    |   4 +-
 bindings.c     | 149 +++++++++++--------------------------------------
 cgroup_fuse.c  |  21 -------
 lxcfs.c        |  11 ++--
 macro.h        |   2 +-
 proc_cpuview.c |  60 ++++++++++++--------
 proc_cpuview.h |  12 +++-
 proc_fuse.c    |  16 +++---
 proc_loadavg.c |   2 +-
 proc_loadavg.h |   1 +
 utils.c        |  41 ++++++++++++++
 utils.h        |   4 ++
 12 files changed, 142 insertions(+), 181 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 7ebc01a..41f3249 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -13,7 +13,7 @@ AM_LDFLAGS = $(FUSE_LIBS) -pthread
 AM_CFLAGS += -DRUNTIME_PATH=\"$(RUNTIME_PATH)\"
 
 liblxcfs_la_SOURCES = bindings.c bindings.h \
-                     cgroup_fuse.c cgroup_fuse.h
+                     cgroup_fuse.c cgroup_fuse.h \
                      cgroups/cgfsng.c \
                      cgroups/cgroup.c cgroups/cgroup.h \
                      cgroups/cgroup2_devices.c cgroups/cgroup2_devices.h \
@@ -30,7 +30,7 @@ liblxcfs_la_CFLAGS = $(AM_CFLAGS)
 liblxcfs_la_LDFLAGS = $(AM_CFLAGS) -module -avoid-version -shared
 
 liblxcfstest_la_SOURCES = bindings.c bindings.h \
-                         cgroup_fuse.c cgroup_fuse.h
+                         cgroup_fuse.c cgroup_fuse.h \
                          cgroups/cgfsng.c \
                          cgroups/cgroup.c cgroups/cgroup.h \
                          cgroups/cgroup2_devices.c cgroups/cgroup2_devices.h \
diff --git a/bindings.c b/bindings.c
index f8970b0..1c737f0 100644
--- a/bindings.c
+++ b/bindings.c
@@ -55,17 +55,17 @@
 
 /* Define pivot_root() if missing from the C library */
 #ifndef HAVE_PIVOT_ROOT
-static int pivot_root(const char * new_root, const char * put_old)
+static int pivot_root(const char *new_root, const char *put_old)
 {
 #ifdef __NR_pivot_root
-return syscall(__NR_pivot_root, new_root, put_old);
+       return syscall(__NR_pivot_root, new_root, put_old);
 #else
-errno = ENOSYS;
-return -1;
+       errno = ENOSYS;
+       return -1;
 #endif
 }
 #else
-extern int pivot_root(const char * new_root, const char * put_old);
+extern int pivot_root(const char *new_root, const char *put_old);
 #endif
 
 /*
@@ -96,14 +96,14 @@ struct pidns_init_store {
 
 static struct pidns_init_store *pidns_hash_table[PIDNS_HASH_SIZE];
 static pthread_mutex_t pidns_store_mutex = PTHREAD_MUTEX_INITIALIZER;
+
 static void lock_mutex(pthread_mutex_t *l)
 {
        int ret;
 
-       if ((ret = pthread_mutex_lock(l)) != 0) {
-               lxcfs_error("returned:%d %s\n", ret, strerror(ret));
-               exit(1);
-       }
+       ret = pthread_mutex_lock(l);
+       if (ret)
+               log_exit("%s - returned %d\n", strerror(ret), ret);
 }
 
 struct cgroup_ops *cgroup_ops;
@@ -112,10 +112,9 @@ static void unlock_mutex(pthread_mutex_t *l)
 {
        int ret;
 
-       if ((ret = pthread_mutex_unlock(l)) != 0) {
-               lxcfs_error("returned:%d %s\n", ret, strerror(ret));
-               exit(1);
-       }
+       ret = pthread_mutex_unlock(l);
+       if (ret)
+               log_exit("%s - returned %d\n", strerror(ret), ret);
 }
 
 static void store_lock(void)
@@ -267,52 +266,22 @@ static struct pidns_init_store 
*lookup_verify_initpid(struct stat *sb)
        return NULL;
 }
 
-struct cgfs_files {
-       char *name;
-       uint32_t uid, gid;
-       uint32_t mode;
-};
-
-static void print_subsystems(void)
+static int send_creds_clone_wrapper(void *arg)
 {
-       int i = 0;
-
-       fprintf(stderr, "mount namespace: %d\n", cgroup_ops->mntns_fd);
-       fprintf(stderr, "hierarchies:\n");
-       for (struct hierarchy **h = cgroup_ops->hierarchies; h && *h; h++, i++) 
{
-               __do_free char *controllers = lxc_string_join(",", (const char 
**)(*h)->controllers, false);
-               fprintf(stderr, " %2d: fd: %3d: %s\n", i, (*h)->fd, controllers 
?: "");
-       }
-}
-
-bool cgfs_param_exist(const char *controller, const char *cgroup, const char 
*file)
-{
-       int ret, cfd;
-       size_t len;
-       char *fnam;
-
-       cfd = get_cgroup_fd(controller);
-       if (cfd < 0)
-               return false;
-
-       /* Make sure we pass a relative path to *at() family of functions.
-        * . + /cgroup + / + file + \0
-        */
-       len = strlen(cgroup) + strlen(file) + 3;
-       fnam = alloca(len);
-       ret = snprintf(fnam, len, "%s%s/%s", dot_or_empty(cgroup), cgroup, 
file);
-       if (ret < 0 || (size_t)ret >= len)
-               return false;
+       struct ucred cred;
+       char v;
+       int sock = *(int *)arg;
 
-       return (faccessat(cfd, fnam, F_OK, 0) == 0);
+       /* we are the child */
+       cred.uid = 0;
+       cred.gid = 0;
+       cred.pid = 1;
+       v = '1';
+       if (send_creds(sock, &cred, v, true) != SEND_CREDS_OK)
+               return 1;
+       return 0;
 }
 
-#define SEND_CREDS_OK 0
-#define SEND_CREDS_NOTSK 1
-#define SEND_CREDS_FAIL 2
-static int wait_for_pid(pid_t pid);
-static int send_creds_clone_wrapper(void *arg);
-
 /*
  * clone a task which switches to @task's namespace and writes '1'.
  * over a unix sock so we can read the task's reaper's pid in our
@@ -355,21 +324,6 @@ static void write_task_init_pid_exit(int sock, pid_t 
target)
        }
 }
 
-static int send_creds_clone_wrapper(void *arg) {
-       struct ucred cred;
-       char v;
-       int sock = *(int *)arg;
-
-       /* we are the child */
-       cred.uid = 0;
-       cred.gid = 0;
-       cred.pid = 1;
-       v = '1';
-       if (send_creds(sock, &cred, v, true) != SEND_CREDS_OK)
-               return 1;
-       return 0;
-}
-
 static pid_t get_init_pid_for_task(pid_t task)
 {
        int sock[2];
@@ -432,52 +386,6 @@ pid_t lookup_initpid_in_store(pid_t qpid)
        return answer;
 }
 
-static int wait_for_pid(pid_t pid)
-{
-       int status, ret;
-
-       if (pid <= 0)
-               return -1;
-
-again:
-       ret = waitpid(pid, &status, 0);
-       if (ret == -1) {
-               if (errno == EINTR)
-                       goto again;
-               return -1;
-       }
-       if (ret != pid)
-               goto again;
-       if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
-               return -1;
-       return 0;
-}
-
-#define INITSCOPE "/init.scope"
-void prune_init_slice(char *cg)
-{
-       char *point;
-       size_t cg_len = strlen(cg), initscope_len = strlen(INITSCOPE);
-
-       if (cg_len < initscope_len)
-               return;
-
-       point = cg + cg_len - initscope_len;
-       if (strcmp(point, INITSCOPE) == 0) {
-               if (point == cg)
-                       *(point+1) = '\0';
-               else
-                       *point = '\0';
-       }
-}
-
-struct pid_ns_clone_args {
-       int *cpipe;
-       int sock;
-       pid_t tpid;
-       int (*wrapped) (int, pid_t); // pid_from_ns or pid_to_ns
-};
-
 /*
  * Functions needed to setup cgroups in the __constructor__.
  */
@@ -756,6 +664,7 @@ static bool cgfs_setup_controllers(void)
 static void __attribute__((constructor)) lxcfs_init(void)
 {
        __do_close_prot_errno int init_ns = -EBADF;
+       int i = 0;
        char *cret;
        char cwd[MAXPATHLEN];
 
@@ -785,7 +694,13 @@ static void __attribute__((constructor)) lxcfs_init(void)
        if (!init_cpuview())
                log_exit("Failed to init CPU view");
 
-       print_subsystems();
+       fprintf(stderr, "mount namespace: %d\n", cgroup_ops->mntns_fd);
+       fprintf(stderr, "hierarchies:\n");
+
+       for (struct hierarchy **h = cgroup_ops->hierarchies; h && *h; h++, i++) 
{
+               __do_free char *controllers = lxc_string_join(",", (const char 
**)(*h)->controllers, false);
+               fprintf(stderr, " %2d: fd: %3d: %s\n", i, (*h)->fd, controllers 
?: "");
+       }
 }
 
 static void __attribute__((destructor)) lxcfs_exit(void)
diff --git a/cgroup_fuse.c b/cgroup_fuse.c
index e33a802..9f9325f 100644
--- a/cgroup_fuse.c
+++ b/cgroup_fuse.c
@@ -1160,27 +1160,6 @@ int cg_open(const char *path, struct fuse_file_info *fi)
 
 #define POLLIN_SET ( EPOLLIN | EPOLLHUP | EPOLLRDHUP )
 
-static int wait_for_pid(pid_t pid)
-{
-       int status, ret;
-
-       if (pid <= 0)
-               return -1;
-
-again:
-       ret = waitpid(pid, &status, 0);
-       if (ret == -1) {
-               if (errno == EINTR)
-                       goto again;
-               return -1;
-       }
-       if (ret != pid)
-               goto again;
-       if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
-               return -1;
-       return 0;
-}
-
 /*
  * pid_to_ns - reads pids from a ucred over a socket, then writes the
  * int value back over the socket.  This shifts the pid from the
diff --git a/lxcfs.c b/lxcfs.c
index 05cd380..ce5a24b 100644
--- a/lxcfs.c
+++ b/lxcfs.c
@@ -39,7 +39,7 @@
 #include <linux/limits.h>
 
 #include "bindings.h"
-#include "config.h" // for VERSION
+#include "config.h"
 
 void *dlopen_handle;
 
@@ -1094,8 +1094,8 @@ int main(int argc, char *argv[])
         */
        int nargs = 5, cnt = 0;
        char *newargv[6];
-
        struct lxcfs_opts *opts;
+
        opts = malloc(sizeof(struct lxcfs_opts));
        if (opts == NULL) {
                fprintf(stderr, "Error allocating memory for options.\n");
@@ -1107,12 +1107,11 @@ int main(int argc, char *argv[])
        swallow_arg(&argc, argv, "-s");
        swallow_arg(&argc, argv, "-f");
        debug = swallow_arg(&argc, argv, "-d");
-       if (swallow_arg(&argc, argv, "-l")) {
+       if (swallow_arg(&argc, argv, "-l"))
                load_use = true;
-       }
-       if (swallow_arg(&argc, argv, "-u")) {
+       if (swallow_arg(&argc, argv, "-u"))
                opts->swap_off = true;
-       }
+
        if (swallow_option(&argc, argv, "-o", &v)) {
                /* Parse multiple values */
                for (; (token = strtok_r(v, ",", &saveptr)); v = NULL) {
diff --git a/macro.h b/macro.h
index 5db599c..dd66f24 100644
--- a/macro.h
+++ b/macro.h
@@ -92,7 +92,7 @@
 #define log_exit(format, ...)                           \
        ({                                              \
                fprintf(stderr, format, ##__VA_ARGS__); \
-               exit(EXIT_FAILURE);                     \
+               _exit(EXIT_FAILURE);                    \
        })
 
 #endif /* __LXCFS_MACRO_H */
diff --git a/proc_cpuview.c b/proc_cpuview.c
index f63b9a4..f159439 100644
--- a/proc_cpuview.c
+++ b/proc_cpuview.c
@@ -46,15 +46,9 @@
 #include "cgroups/cgroup.h"
 #include "cgroups/cgroup_utils.h"
 #include "memory_utils.h"
+#include "proc_loadavg.h"
 #include "utils.h"
 
-struct cpuacct_usage {
-       uint64_t user;
-       uint64_t system;
-       uint64_t idle;
-       bool online;
-};
-
 /* Data for CPU view */
 struct cg_proc_stat {
        char *cg;
@@ -138,6 +132,15 @@ static bool expand_proc_stat_node(struct cg_proc_stat 
*node, int cpu_count)
        return true;
 }
 
+static void free_proc_stat_node(struct cg_proc_stat *node)
+{
+       pthread_mutex_destroy(&node->lock);
+       free_disarm(node->cg);
+       free_disarm(node->usage);
+       free_disarm(node->view);
+       free_disarm(node);
+}
+
 static struct cg_proc_stat *add_proc_stat_node(struct cg_proc_stat *new_node)
 {
        int hash = calc_hash(new_node->cg) % CPUVIEW_HASH_SIZE;
@@ -233,6 +236,29 @@ static struct cg_proc_stat *new_proc_stat_node(struct 
cpuacct_usage *usage, int
        return NULL;
 }
 
+static bool cgfs_param_exist(const char *controller, const char *cgroup,
+                            const char *file)
+{
+       int ret, cfd;
+       size_t len;
+       char *fnam;
+
+       cfd = get_cgroup_fd(controller);
+       if (cfd < 0)
+               return false;
+
+       /* Make sure we pass a relative path to *at() family of functions.
+        * . + /cgroup + / + file + \0
+        */
+       len = strlen(cgroup) + strlen(file) + 3;
+       fnam = alloca(len);
+       ret = snprintf(fnam, len, "%s%s/%s", dot_or_empty(cgroup), cgroup, 
file);
+       if (ret < 0 || (size_t)ret >= len)
+               return false;
+
+       return (faccessat(cfd, fnam, F_OK, 0) == 0);
+}
+
 static struct cg_proc_stat *prune_proc_stat_list(struct cg_proc_stat *node)
 {
        struct cg_proc_stat *first = NULL, *prev, *tmp;
@@ -454,7 +480,7 @@ static double exact_cpu_count(const char *cg)
  * Return the maximum number of visible CPUs based on CPU quotas.
  * If there is no quota set, zero is returned.
  */
-static int max_cpu_count(const char *cg)
+int max_cpu_count(const char *cg)
 {
        int rv, nprocs;
        int64_t cfs_quota, cfs_period;
@@ -1129,7 +1155,7 @@ static bool cpuview_init_head(struct cg_proc_stat_head 
**head)
        return true;
 }
 
-bool init_cpuview()
+bool init_cpuview(void)
 {
        int i;
 
@@ -1152,15 +1178,6 @@ bool init_cpuview()
        return false;
 }
 
-static void free_proc_stat_node(struct cg_proc_stat *node)
-{
-       pthread_mutex_destroy(&node->lock);
-       free_disarm(node->cg);
-       free_disarm(node->usage);
-       free_disarm(node->view);
-       free_disarm(node);
-}
-
 static void cpuview_free_head(struct cg_proc_stat_head *head)
 {
        struct cg_proc_stat *node, *tmp;
@@ -1182,12 +1199,9 @@ static void cpuview_free_head(struct cg_proc_stat_head 
*head)
        free_disarm(head);
 }
 
-void free_cpuview()
+void free_cpuview(void)
 {
-       int i;
-
-       for (i = 0; i < CPUVIEW_HASH_SIZE; i++) {
+       for (int i = 0; i < CPUVIEW_HASH_SIZE; i++)
                if (proc_stat_history[i])
                        cpuview_free_head(proc_stat_history[i]);
-       }
 }
diff --git a/proc_cpuview.h b/proc_cpuview.h
index 91948a3..1e4fda5 100644
--- a/proc_cpuview.h
+++ b/proc_cpuview.h
@@ -21,7 +21,12 @@
 #include "config.h"
 #include "macro.h"
 
-struct cpuacct_usage;
+struct cpuacct_usage {
+       uint64_t user;
+       uint64_t system;
+       uint64_t idle;
+       bool online;
+};
 
 extern int cpuview_proc_stat(const char *cg, const char *cpuset,
                             struct cpuacct_usage *cg_cpu_usage,
@@ -31,8 +36,9 @@ extern int proc_cpuinfo_read(char *buf, size_t size, off_t 
offset,
                             struct fuse_file_info *fi);
 extern int read_cpuacct_usage_all(char *cg, char *cpuset,
                                  struct cpuacct_usage **return_usage, int 
*size);
-extern bool init_cpuview();
-extern void free_cpuview();
+extern bool init_cpuview(void);
+extern void free_cpuview(void);
+extern int max_cpu_count(const char *cg);
 
 #endif /* __LXCFS_PROC_CPUVIEW_FUSE_H */
 
diff --git a/proc_fuse.c b/proc_fuse.c
index 37e9a1a..623a415 100644
--- a/proc_fuse.c
+++ b/proc_fuse.c
@@ -44,8 +44,10 @@
 #include "cgroup_fuse.h"
 #include "cgroups/cgroup.h"
 #include "cgroups/cgroup_utils.h"
+#include "cpuset_parse.h"
 #include "memory_utils.h"
 #include "proc_loadavg.h"
+#include "proc_cpuview.h"
 #include "utils.h"
 
 int proc_getattr(const char *path, struct stat *sb)
@@ -209,6 +211,13 @@ static unsigned long get_min_memlimit(const char *cgroup, 
bool swap)
        return retlimit;
 }
 
+static bool startswith(const char *line, const char *pref)
+{
+       if (strncmp(line, pref, strlen(pref)) == 0)
+               return true;
+       return false;
+}
+
 static int proc_swaps_read(char *buf, size_t size, off_t offset,
                           struct fuse_file_info *fi)
 {
@@ -997,13 +1006,6 @@ static void parse_memstat(int version,
        }
 }
 
-static bool startswith(const char *line, const char *pref)
-{
-       if (strncmp(line, pref, strlen(pref)) == 0)
-               return true;
-       return false;
-}
-
 static int proc_meminfo_read(char *buf, size_t size, off_t offset,
                             struct fuse_file_info *fi)
 {
diff --git a/proc_loadavg.c b/proc_loadavg.c
index b0f6910..3947f31 100644
--- a/proc_loadavg.c
+++ b/proc_loadavg.c
@@ -144,7 +144,7 @@ static void insert_node(struct load_node **n, int locate)
        pthread_rwlock_unlock(&load_hash[locate].rilock);
 }
 
-static int calc_hash(const char *name)
+int calc_hash(const char *name)
 {
        unsigned int hash = 0;
        unsigned int x = 0;
diff --git a/proc_loadavg.h b/proc_loadavg.h
index a4b0f13..5319620 100644
--- a/proc_loadavg.h
+++ b/proc_loadavg.h
@@ -27,6 +27,7 @@ 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);
+extern int calc_hash(const char *name);
 
 #endif /* __LXCFS_PROC_LOADAVG_FUSE_H */
 
diff --git a/utils.c b/utils.c
index 595ab6c..f1c16a1 100644
--- a/utils.c
+++ b/utils.c
@@ -16,6 +16,7 @@
 #include <inttypes.h>
 #include <sched.h>
 #include <stdarg.h>
+#include <stdio.h>
 #include <stdbool.h>
 #include <stdint.h>
 #include <stdio.h>
@@ -24,6 +25,7 @@
 #include <sys/epoll.h>
 #include <sys/stat.h>
 #include <sys/types.h>
+#include <sys/wait.h>
 #include <unistd.h>
 
 #include "bindings.h"
@@ -353,3 +355,42 @@ int read_file_fuse(const char *path, char *buf, size_t 
size, struct file_info *d
                d->cached = d->size - total_len;
        return total_len;
 }
+
+#define INITSCOPE "/init.scope"
+void prune_init_slice(char *cg)
+{
+       char *point;
+       size_t cg_len = strlen(cg), initscope_len = strlen(INITSCOPE);
+
+       if (cg_len < initscope_len)
+               return;
+
+       point = cg + cg_len - initscope_len;
+       if (strcmp(point, INITSCOPE) == 0) {
+               if (point == cg)
+                       *(point+1) = '\0';
+               else
+                       *point = '\0';
+       }
+}
+
+int wait_for_pid(pid_t pid)
+{
+       int status, ret;
+
+       if (pid <= 0)
+               return -1;
+
+again:
+       ret = waitpid(pid, &status, 0);
+       if (ret == -1) {
+               if (errno == EINTR)
+                       goto again;
+               return -1;
+       }
+       if (ret != pid)
+               goto again;
+       if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
+               return -1;
+       return 0;
+}
diff --git a/utils.h b/utils.h
index 3cba952..6c874b4 100644
--- a/utils.h
+++ b/utils.h
@@ -14,10 +14,12 @@
 #define _FILE_OFFSET_BITS 64
 
 #include <fuse.h>
+#include <signal.h>
 #include <stdbool.h>
 #include <sys/socket.h>
 #include <sys/types.h>
 #include <sys/un.h>
+#include <sys/syscall.h>
 #include <unistd.h>
 
 #include "config.h"
@@ -41,5 +43,7 @@ extern int send_creds(int sock, struct ucred *cred, char v, 
bool pingfirst);
 extern bool wait_for_sock(int sock, int timeout);
 extern int read_file_fuse(const char *path, char *buf, size_t size,
                          struct file_info *d);
+extern void prune_init_slice(char *cg);
+extern int wait_for_pid(pid_t pid);
 
 #endif /* __LXCFS_UTILS_H */
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to