From 7e7243e16b5af166d6477b81755df67d1082f39b Mon Sep 17 00:00:00 2001 From: Serge Hallyn Date: Thu, 19 Dec 2013 15:18:24 -0600 Subject: [PATCH] cgroup: don't set clone_children when it is already 1 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Acked-by: Stéphane Graber --- 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 8be0ebf42..f2a686a32 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); -- 2.47.2