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

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 c468e4d42902d6f56659ee3b3d9009c5d711337a Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brau...@ubuntu.com>
Date: Sat, 28 Mar 2020 14:56:51 +0100
Subject: [PATCH 1/3] cgroups: move check for valid monitor process up

Cc: cenxianlong <cenxianl...@huawei.com>
Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
---
 src/lxc/cgroups/cgfsng.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c
index 0df8506954..68d158aa30 100644
--- a/src/lxc/cgroups/cgfsng.c
+++ b/src/lxc/cgroups/cgfsng.c
@@ -1082,6 +1082,12 @@ __cgfsng_ops static void cgfsng_monitor_destroy(struct 
cgroup_ops *ops,
                if (!h->monitor_full_path)
                        continue;
 
+               /* Monitor might have died before we entered the cgroup. */
+               if (handler->monitor_pid <= 0) {
+                       WARN("No valid monitor process found while destroying 
cgroups");
+                       goto try_recursive_destroy;
+               }
+
                if (conf && conf->cgroup_meta.dir)
                        pivot_path = must_make_path(h->mountpoint,
                                                    h->container_base_path,
@@ -1098,12 +1104,10 @@ __cgfsng_ops static void cgfsng_monitor_destroy(struct 
cgroup_ops *ops,
                        goto try_recursive_destroy;
                }
 
-               if (handler->monitor_pid != 0) {
-                       ret = lxc_write_openat(pivot_path, "cgroup.procs", 
pidstr, len);
-                       if (ret != 0) {
-                               SYSWARN("Failed to move monitor %s to \"%s\"", 
pidstr, pivot_path);
-                               continue;
-                       }
+               ret = lxc_write_openat(pivot_path, "cgroup.procs", pidstr, len);
+               if (ret != 0) {
+                       SYSWARN("Failed to move monitor %s to \"%s\"", pidstr, 
pivot_path);
+                       continue;
                }
 
 try_recursive_destroy:

From de6fe1328c4d9b0e04fc9c6cbf845690c182c859 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brau...@ubuntu.com>
Date: Sat, 28 Mar 2020 15:01:58 +0100
Subject: [PATCH 2/3] cgroups: better helper naming

Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
---
 src/lxc/cgroups/cgfsng.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c
index 68d158aa30..11b6fd3c9b 100644
--- a/src/lxc/cgroups/cgfsng.c
+++ b/src/lxc/cgroups/cgfsng.c
@@ -945,7 +945,7 @@ static void lxc_cgfsng_print_basecg_debuginfo(char 
*basecginfo, char **klist,
                TRACE("named subsystem %d: %s", k, *it);
 }
 
-static int cgroup_rmdir(struct hierarchy **hierarchies,
+static int cgroup_tree_remove(struct hierarchy **hierarchies,
                        const char *container_cgroup)
 {
        if (!container_cgroup || !hierarchies)
@@ -976,7 +976,7 @@ struct generic_userns_exec_data {
        char *path;
 };
 
-static int cgroup_rmdir_wrapper(void *data)
+static int cgroup_tree_remove_wrapper(void *data)
 {
        struct generic_userns_exec_data *arg = data;
        uid_t nsuid = (arg->conf->root_nsuid_map != NULL) ? 0 : 
arg->conf->init_uid;
@@ -996,7 +996,7 @@ static int cgroup_rmdir_wrapper(void *data)
                return log_error_errno(-1, errno, "Failed to setresuid(%d, %d, 
%d)",
                                       (int)nsuid, (int)nsuid, (int)nsuid);
 
-       return cgroup_rmdir(arg->hierarchies, arg->container_cgroup);
+       return cgroup_tree_remove(arg->hierarchies, arg->container_cgroup);
 }
 
 __cgfsng_ops static void cgfsng_payload_destroy(struct cgroup_ops *ops,
@@ -1035,10 +1035,10 @@ __cgfsng_ops static void cgfsng_payload_destroy(struct 
cgroup_ops *ops,
                        .hierarchies            = ops->hierarchies,
                        .origuid                = 0,
                };
-               ret = userns_exec_1(handler->conf, cgroup_rmdir_wrapper, &wrap,
-                                   "cgroup_rmdir_wrapper");
+               ret = userns_exec_1(handler->conf, cgroup_tree_remove_wrapper,
+                                   &wrap, "cgroup_tree_remove_wrapper");
        } else {
-               ret = cgroup_rmdir(ops->hierarchies, ops->container_cgroup);
+               ret = cgroup_tree_remove(ops->hierarchies, 
ops->container_cgroup);
        }
        if (ret < 0)
                SYSWARN("Failed to destroy cgroups");
@@ -1145,7 +1145,7 @@ static int mkdir_eexist_on_last(const char *dir, mode_t 
mode)
        return 0;
 }
 
-static bool create_cgroup_tree(struct hierarchy *h, const char *cgroup_tree,
+static bool cgroup_tree_create(struct hierarchy *h, const char *cgroup_tree,
                               const char *cgroup_leaf, bool payload)
 {
        __do_free char *path = NULL;
@@ -1185,7 +1185,7 @@ static bool create_cgroup_tree(struct hierarchy *h, const 
char *cgroup_tree,
        return true;
 }
 
-static void cgroup_remove_leaf(struct hierarchy *h, bool payload)
+static void cgroup_tree_leaf_remove(struct hierarchy *h, bool payload)
 {
        __do_free char *full_path = NULL;
 
@@ -1257,12 +1257,12 @@ __cgfsng_ops static inline bool 
cgfsng_monitor_create(struct cgroup_ops *ops,
                        sprintf(suffix, "-%d", idx);
 
                for (i = 0; ops->hierarchies[i]; i++) {
-                       if (create_cgroup_tree(ops->hierarchies[i], 
cgroup_tree, monitor_cgroup, false))
+                       if (cgroup_tree_create(ops->hierarchies[i], 
cgroup_tree, monitor_cgroup, false))
                                continue;
 
                        ERROR("Failed to create cgroup \"%s\"", 
ops->hierarchies[i]->monitor_full_path ?: "(null)");
                        for (int j = 0; j < i; j++)
-                               cgroup_remove_leaf(ops->hierarchies[j], false);
+                               cgroup_tree_leaf_remove(ops->hierarchies[j], 
false);
 
                        idx++;
                        break;
@@ -1336,12 +1336,12 @@ __cgfsng_ops static inline bool 
cgfsng_payload_create(struct cgroup_ops *ops,
                        sprintf(suffix, "-%d", idx);
 
                for (i = 0; ops->hierarchies[i]; i++) {
-                       if (create_cgroup_tree(ops->hierarchies[i], 
cgroup_tree, container_cgroup, true))
+                       if (cgroup_tree_create(ops->hierarchies[i], 
cgroup_tree, container_cgroup, true))
                                continue;
 
                        ERROR("Failed to create cgroup \"%s\"", 
ops->hierarchies[i]->container_full_path ?: "(null)");
                        for (int j = 0; j < i; j++)
-                               cgroup_remove_leaf(ops->hierarchies[j], true);
+                               cgroup_tree_leaf_remove(ops->hierarchies[j], 
true);
 
                        idx++;
                        break;

From 8408a9cc8dcff977ba32de8e3e12299662462aab Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brau...@ubuntu.com>
Date: Sat, 28 Mar 2020 15:03:51 +0100
Subject: [PATCH 3/3] tree-wide: s/recursive_destroy/lxc_rm_rf/g

Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
---
 src/lxc/cgroups/cgfsng.c    | 10 +++++-----
 src/lxc/storage/btrfs.c     |  6 +++---
 src/lxc/tools/lxc_ls.c      |  2 +-
 src/lxc/utils.c             |  4 ++--
 src/lxc/utils.h             |  2 +-
 src/tests/mount_injection.c |  2 +-
 6 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c
index 11b6fd3c9b..5c37c842e0 100644
--- a/src/lxc/cgroups/cgfsng.c
+++ b/src/lxc/cgroups/cgfsng.c
@@ -958,7 +958,7 @@ static int cgroup_tree_remove(struct hierarchy 
**hierarchies,
                if (!h->container_full_path)
                        continue;
 
-               ret = recursive_destroy(h->container_full_path);
+               ret = lxc_rm_rf(h->container_full_path);
                if (ret < 0)
                        WARN("Failed to destroy \"%s\"", 
h->container_full_path);
 
@@ -1085,7 +1085,7 @@ __cgfsng_ops static void cgfsng_monitor_destroy(struct 
cgroup_ops *ops,
                /* Monitor might have died before we entered the cgroup. */
                if (handler->monitor_pid <= 0) {
                        WARN("No valid monitor process found while destroying 
cgroups");
-                       goto try_recursive_destroy;
+                       goto try_lxc_rm_rf;
                }
 
                if (conf && conf->cgroup_meta.dir)
@@ -1101,7 +1101,7 @@ __cgfsng_ops static void cgfsng_monitor_destroy(struct 
cgroup_ops *ops,
                ret = mkdir_p(pivot_path, 0755);
                if (ret < 0 && errno != EEXIST) {
                        ERROR("Failed to create %s", pivot_path);
-                       goto try_recursive_destroy;
+                       goto try_lxc_rm_rf;
                }
 
                ret = lxc_write_openat(pivot_path, "cgroup.procs", pidstr, len);
@@ -1110,8 +1110,8 @@ __cgfsng_ops static void cgfsng_monitor_destroy(struct 
cgroup_ops *ops,
                        continue;
                }
 
-try_recursive_destroy:
-               ret = recursive_destroy(h->monitor_full_path);
+try_lxc_rm_rf:
+               ret = lxc_rm_rf(h->monitor_full_path);
                if (ret < 0)
                        WARN("Failed to destroy \"%s\"", h->monitor_full_path);
        }
diff --git a/src/lxc/storage/btrfs.c b/src/lxc/storage/btrfs.c
index 0929305197..92a4a6def2 100644
--- a/src/lxc/storage/btrfs.c
+++ b/src/lxc/storage/btrfs.c
@@ -730,7 +730,7 @@ static bool do_remove_btrfs_children(struct my_btrfs_tree 
*tree, u64 root_id,
        return true;
 }
 
-static int btrfs_recursive_destroy(const char *path)
+static int btrfs_lxc_rm_rf(const char *path)
 {
        u64 root_id;
        int fd;
@@ -893,7 +893,7 @@ bool btrfs_try_remove_subvol(const char *path)
        if (!btrfs_detect(path))
                return false;
 
-       return btrfs_recursive_destroy(path) == 0;
+       return btrfs_lxc_rm_rf(path) == 0;
 }
 
 int btrfs_destroy(struct lxc_storage *orig)
@@ -902,7 +902,7 @@ int btrfs_destroy(struct lxc_storage *orig)
 
        src = lxc_storage_get_path(orig->src, "btrfs");
 
-       return btrfs_recursive_destroy(src);
+       return btrfs_lxc_rm_rf(src);
 }
 
 int btrfs_create(struct lxc_storage *bdev, const char *dest, const char *n,
diff --git a/src/lxc/tools/lxc_ls.c b/src/lxc/tools/lxc_ls.c
index 7a0ae62698..4be8564d19 100644
--- a/src/lxc/tools/lxc_ls.c
+++ b/src/lxc/tools/lxc_ls.c
@@ -1071,7 +1071,7 @@ static int ls_remove_lock(const char *path, const char 
*name,
        if (check < 0 || (size_t)check >= *len_lockpath)
                goto out;
 
-       ret = recursive_destroy(*lockpath);
+       ret = lxc_rm_rf(*lockpath);
        if (ret < 0)
                WARN("Failed to destroy \"%s\"", *lockpath);
 
diff --git a/src/lxc/utils.c b/src/lxc/utils.c
index c34519084d..97507fe642 100644
--- a/src/lxc/utils.c
+++ b/src/lxc/utils.c
@@ -1747,7 +1747,7 @@ int fd_cloexec(int fd, bool cloexec)
        return 0;
 }
 
-int recursive_destroy(const char *dirname)
+int lxc_rm_rf(const char *dirname)
 {
        __do_closedir DIR *dir = NULL;
        int fret = 0;
@@ -1779,7 +1779,7 @@ int recursive_destroy(const char *dirname)
                if (!S_ISDIR(mystat.st_mode))
                        continue;
 
-               ret = recursive_destroy(pathname);
+               ret = lxc_rm_rf(pathname);
                if (ret < 0)
                        fret = -1;
        }
diff --git a/src/lxc/utils.h b/src/lxc/utils.h
index 1d980f8855..4ab41bf1f4 100644
--- a/src/lxc/utils.h
+++ b/src/lxc/utils.h
@@ -235,7 +235,7 @@ extern uint64_t lxc_find_next_power2(uint64_t n);
 /* Set a signal the child process will receive after the parent has died. */
 extern int lxc_set_death_signal(int signal, pid_t parent, int 
parent_status_fd);
 extern int fd_cloexec(int fd, bool cloexec);
-extern int recursive_destroy(const char *dirname);
+extern int lxc_rm_rf(const char *dirname);
 extern int lxc_setup_keyring(char *keyring_label);
 extern bool lxc_can_use_pidfd(int pidfd);
 
diff --git a/src/tests/mount_injection.c b/src/tests/mount_injection.c
index 3ea15f4331..3c44d4014f 100644
--- a/src/tests/mount_injection.c
+++ b/src/tests/mount_injection.c
@@ -415,7 +415,7 @@ static bool lxc_setup_shmount(const char *shmount_path)
 static void lxc_teardown_shmount(char *shmount_path)
 {
        (void)umount2(shmount_path, MNT_DETACH);
-       (void)recursive_destroy(shmount_path);
+       (void)lxc_rm_rf(shmount_path);
 }
 
 int main(int argc, char *argv[])
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to