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

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 0646f250d5dc7af1732b53beb9081c2d27cba662 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brau...@ubuntu.com>
Date: Tue, 25 Feb 2020 13:11:23 +0100
Subject: [PATCH 1/3] cgroups: move mntns fd into struct cgroup_ops

Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
---
 bindings.c       | 11 ++++-------
 cgroups/cgroup.c |  4 ++++
 cgroups/cgroup.h |  6 ++++++
 3 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/bindings.c b/bindings.c
index 4e2848c..390ae5d 100644
--- a/bindings.c
+++ b/bindings.c
@@ -414,8 +414,6 @@ static void lock_mutex(pthread_mutex_t *l)
 
 struct cgroup_ops *cgroup_ops;
 
-static int cgroup_mount_ns_fd = -1;
-
 static void unlock_mutex(pthread_mutex_t *l)
 {
        int ret;
@@ -701,7 +699,7 @@ static void print_subsystems(void)
 {
        int i = 0;
 
-       fprintf(stderr, "mount namespace: %d\n", cgroup_mount_ns_fd);
+       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);
@@ -6056,8 +6054,8 @@ static bool cgfs_prepare_mounts(void)
                return false;
        }
 
-       cgroup_mount_ns_fd = preserve_mnt_ns(getpid());
-       if (cgroup_mount_ns_fd < 0) {
+       cgroup_ops->mntns_fd = preserve_mnt_ns(getpid());
+       if (cgroup_ops->mntns_fd < 0) {
                lxcfs_error("Failed to preserve mount namespace: %s.\n", 
strerror(errno));
                return false;
        }
@@ -6146,8 +6144,7 @@ static void __attribute__((constructor)) lxcfs_init(void)
 
 static void __attribute__((destructor)) lxcfs_exit(void)
 {
-       lxcfs_debug("%s\n", "Running destructor for liblxcfs.");
+       lxcfs_debug("%s\n", "Running destructor for liblxcfs");
        free_cpuview();
-       close_prot_errno_disarm(cgroup_mount_ns_fd);
        cgroup_exit(cgroup_ops);
 }
diff --git a/cgroups/cgroup.c b/cgroups/cgroup.c
index aebafbd..34e9a14 100644
--- a/cgroups/cgroup.c
+++ b/cgroups/cgroup.c
@@ -51,6 +51,10 @@ void cgroup_exit(struct cgroup_ops *ops)
                free((*it)->monitor_full_path);
                free(*it);
        }
+
+       if (ops->mntns_fd >= 0)
+               close(ops->mntns_fd);
+
        free(ops->hierarchies);
 
        free(ops);
diff --git a/cgroups/cgroup.h b/cgroups/cgroup.h
index e955e75..d200000 100644
--- a/cgroups/cgroup.h
+++ b/cgroups/cgroup.h
@@ -74,6 +74,12 @@ struct hierarchy {
 };
 
 struct cgroup_ops {
+       /*
+        * File descriptor of the mount namespace the cgroup hierarchies are
+        * mounted in.
+        */
+       int mntns_fd;
+
        /* string constant */
        const char *driver;
 

From 6a9d2ce91bb44a43ca75ce08369bb453f3e09d47 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brau...@ubuntu.com>
Date: Tue, 25 Feb 2020 13:27:30 +0100
Subject: [PATCH 2/3] cgroups: remove ->nrtasks method

Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
---
 cgroups/cgfsng.c | 52 ------------------------------------------------
 cgroups/cgroup.h |  1 -
 2 files changed, 53 deletions(-)

diff --git a/cgroups/cgfsng.c b/cgroups/cgfsng.c
index 8d972b7..05982e4 100644
--- a/cgroups/cgfsng.c
+++ b/cgroups/cgfsng.c
@@ -501,57 +501,6 @@ static bool cgfsng_mount(struct cgroup_ops *ops, const 
char *root)
        return retval;
 }
 
-static int recursive_count_nrtasks(char *dirname)
-{
-       __do_free char *path = NULL;
-       __do_closedir DIR *dir = NULL;
-       struct dirent *direntp;
-       int count = 0, ret;
-
-       dir = opendir(dirname);
-       if (!dir)
-               return 0;
-
-       while ((direntp = readdir(dir))) {
-               struct stat mystat;
-
-               if (!strcmp(direntp->d_name, ".") ||
-                   !strcmp(direntp->d_name, ".."))
-                       continue;
-
-               path = must_make_path(dirname, direntp->d_name, NULL);
-
-               if (lstat(path, &mystat))
-                       continue;
-
-               if (!S_ISDIR(mystat.st_mode))
-                       continue;
-
-               count += recursive_count_nrtasks(path);
-       }
-
-       path = must_make_path(dirname, "cgroup.procs", NULL);
-       ret = lxc_count_file_lines(path);
-       if (ret != -1)
-               count += ret;
-
-       return count;
-}
-
-static int cgfsng_nrtasks(struct cgroup_ops *ops)
-{
-       __do_free char *path = NULL;
-
-       if (!ops)
-               return ret_set_errno(-1, ENOENT);
-
-       if (!ops->container_cgroup || !ops->hierarchies)
-               return ret_set_errno(-1, EINVAL);
-
-       path = must_make_path(ops->hierarchies[0]->container_full_path, NULL);
-       return recursive_count_nrtasks(path);
-}
-
 static int cgfsng_num_hierarchies(struct cgroup_ops *ops)
 {
        int i = 0;
@@ -1006,7 +955,6 @@ struct cgroup_ops *cgfsng_ops_init(void)
        cgfsng_ops->driver = "cgfsng";
        cgfsng_ops->version = "1.0.0";
        cgfsng_ops->mount = cgfsng_mount;
-       cgfsng_ops->nrtasks = cgfsng_nrtasks;
 
        /* memory */
        cgfsng_ops->get_memory_stats = cgfsng_get_memory_stats;
diff --git a/cgroups/cgroup.h b/cgroups/cgroup.h
index d200000..926130d 100644
--- a/cgroups/cgroup.h
+++ b/cgroups/cgroup.h
@@ -123,7 +123,6 @@ struct cgroup_ops {
        int (*num_hierarchies)(struct cgroup_ops *ops);
        bool (*get_hierarchies)(struct cgroup_ops *ops, int n, char ***out);
        bool (*mount)(struct cgroup_ops *ops, const char *root);
-       int (*nrtasks)(struct cgroup_ops *ops);
        struct hierarchy *(*get_hierarchy)(struct cgroup_ops *ops,
                                           const char *controller);
        bool (*get)(struct cgroup_ops *ops, const char *controller,

From 0fd1b770c37f2e4ccb232029607a0eb57a60b721 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brau...@ubuntu.com>
Date: Tue, 25 Feb 2020 13:33:37 +0100
Subject: [PATCH 3/3] cgroups: remove unused variables

Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
---
 cgroups/cgfsng.c |  9 ++++-----
 cgroups/cgroup.c | 15 +++------------
 cgroups/cgroup.h |  8 +-------
 3 files changed, 8 insertions(+), 24 deletions(-)

diff --git a/cgroups/cgfsng.c b/cgroups/cgfsng.c
index 05982e4..9708955 100644
--- a/cgroups/cgfsng.c
+++ b/cgroups/cgfsng.c
@@ -300,7 +300,7 @@ static char **cg_unified_get_controllers(const char *file)
 }
 
 static struct hierarchy *add_hierarchy(struct hierarchy ***h, char **clist, 
char *mountpoint,
-                                      char *container_base_path, int type)
+                                      char *base_path, int type)
 {
        struct hierarchy *new;
        int newentry;
@@ -308,7 +308,7 @@ static struct hierarchy *add_hierarchy(struct hierarchy 
***h, char **clist, char
        new = zalloc(sizeof(*new));
        new->controllers = clist;
        new->mountpoint = mountpoint;
-       new->container_base_path = container_base_path;
+       new->base_path = base_path;
        new->version = type;
 
        newentry = append_null_to_list((void ***)h);
@@ -828,11 +828,10 @@ static int cg_hybrid_init(struct cgroup_ops *ops)
                if (!mountpoint)
                        log_error_errno(goto next, EINVAL, "Failed parsing 
mountpoint from \"%s\"", line);
 
-               if (type == CGROUP_SUPER_MAGIC) {
+               if (type == CGROUP_SUPER_MAGIC)
                        base_cgroup = cg_hybrid_get_current_cgroup(basecginfo, 
controller_list[0], CGROUP_SUPER_MAGIC);
-               } else {
+               else
                        base_cgroup = cg_hybrid_get_current_cgroup(basecginfo, 
NULL, CGROUP2_SUPER_MAGIC);
-               }
                if (!base_cgroup)
                        log_error_errno(goto next, EINVAL, "Failed to find 
current cgroup %s", mountpoint);
 
diff --git a/cgroups/cgroup.c b/cgroups/cgroup.c
index 34e9a14..9a5aa61 100644
--- a/cgroups/cgroup.c
+++ b/cgroups/cgroup.c
@@ -26,18 +26,11 @@ struct cgroup_ops *cgroup_init(void)
 
 void cgroup_exit(struct cgroup_ops *ops)
 {
-       struct hierarchy **it;
-
        if (!ops)
                return;
 
-       free(ops->container_cgroup);
-       free(ops->monitor_cgroup);
-
-       for (it = ops->hierarchies; it && *it; it++) {
-               char **p;
-
-               for (p = (*it)->controllers; p && *p; p++)
+       for (struct hierarchy **it = ops->hierarchies; it && *it; it++) {
+               for (char **p = (*it)->controllers; p && *p; p++)
                        free(*p);
                free((*it)->controllers);
                free((*it)->__controllers);
@@ -46,9 +39,7 @@ void cgroup_exit(struct cgroup_ops *ops)
                        close((*it)->fd);
 
                free((*it)->mountpoint);
-               free((*it)->container_base_path);
-               free((*it)->container_full_path);
-               free((*it)->monitor_full_path);
+               free((*it)->base_path);
                free(*it);
        }
 
diff --git a/cgroups/cgroup.h b/cgroups/cgroup.h
index 926130d..e84233b 100644
--- a/cgroups/cgroup.h
+++ b/cgroups/cgroup.h
@@ -63,9 +63,7 @@ struct hierarchy {
        char **controllers;
        char *__controllers;
        char *mountpoint;
-       char *container_base_path;
-       char *container_full_path;
-       char *monitor_full_path;
+       char *base_path;
        int version;
 
        /* cgroup2 only */
@@ -86,10 +84,6 @@ struct cgroup_ops {
        /* string constant */
        const char *version;
 
-       /* What controllers is the container supposed to use. */
-       char *container_cgroup;
-       char *monitor_cgroup;
-
        /* @hierarchies
         * - A NULL-terminated array of struct hierarchy, one per legacy
         *   hierarchy. No duplicates. First sufficient, writeable mounted
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to