[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