[lxc-devel] [PATCH 1/1] cgroup: don't set clone_children when it is already 1

Serge Hallyn serge.hallyn at ubuntu.com
Thu Dec 19 21:18:24 UTC 2013


In particular, if it's already 1, and we can't change it, we currently
fail out.  That's silly.

I was going to just always continue, but if clone_children is not 1,
then the container *will* fail to start later on, so I'd rather stop
earlier on so the original cause doesn't get lost in the noise.

Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
---
 src/lxc/cgroup.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/lxc/cgroup.c b/src/lxc/cgroup.c
index 8be0ebf..f2a686a 100644
--- a/src/lxc/cgroup.c
+++ b/src/lxc/cgroup.c
@@ -1944,6 +1944,7 @@ int count_lines(const char *fn)
 int handle_cgroup_settings(struct cgroup_mount_point *mp, char *cgroup_path)
 {
 	int r, saved_errno = 0;
+	char buf[2];
 
 	/* If this is the memory cgroup, we want to enforce hierarchy.
 	 * But don't fail if for some reason we can't.
@@ -1951,9 +1952,12 @@ int handle_cgroup_settings(struct cgroup_mount_point *mp, char *cgroup_path)
 	if (lxc_string_in_array("memory", (const char **)mp->hierarchy->subsystems)) {
 		char *cc_path = cgroup_to_absolute_path(mp, cgroup_path, "/memory.use_hierarchy");
 		if (cc_path) {
-			r = lxc_write_to_file(cc_path, "1", 1, false);
-			if (r < 0)
-				SYSERROR("failed to set memory.use_hiararchy to 1; continuing");
+			r = lxc_read_from_file(cc_path, buf, 1);
+			if (r < 1 || buf[0] != '1') {
+				r = lxc_write_to_file(cc_path, "1", 1, false);
+				if (r < 0)
+					SYSERROR("failed to set memory.use_hiararchy to 1; continuing");
+			}
 			free(cc_path);
 		}
 	}
@@ -1966,6 +1970,11 @@ int handle_cgroup_settings(struct cgroup_mount_point *mp, char *cgroup_path)
 		char *cc_path = cgroup_to_absolute_path(mp, cgroup_path, "/cgroup.clone_children");
 		if (!cc_path)
 			return -1;
+		r = lxc_read_from_file(cc_path, buf, 1);
+		if (r == 1 && buf[0] == '1') {
+			free(cc_path);
+			return 0;
+		}
 		r = lxc_write_to_file(cc_path, "1", 1, false);
 		saved_errno = errno;
 		free(cc_path);
-- 
1.8.5.2



More information about the lxc-devel mailing list