[lxc-devel] [lxc/master] tree-wide: fixes
brauner on Github
lxc-bot at linuxcontainers.org
Sat Mar 28 14:07:07 UTC 2020
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 364 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200328/365aea23/attachment.bin>
-------------- next part --------------
From c468e4d42902d6f56659ee3b3d9009c5d711337a Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at 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 <cenxianlong at huawei.com>
Signed-off-by: Christian Brauner <christian.brauner at 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.brauner at 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.brauner at 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.brauner at 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.brauner at 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[])
More information about the lxc-devel
mailing list