From f348e47c93568b4f0c371cf5df1c98d4e816a86c Mon Sep 17 00:00:00 2001 From: Serge Hallyn Date: Thu, 15 Oct 2015 18:56:17 +0000 Subject: [PATCH] Ignore trailing /init.scope in init cgroups MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The lxc monitor does not store the container's cgroups, rather it recalculates them whenever needed. Systemd moves itself into a /init.scope cgroup for the systemd controller. It might be worth changing that (by storing all cgroup info in the lxc_handler), but for now go the hacky route and chop off any trailing /init.scope. I definately thinkg we want to switch to storing as that will be more bullet-proof, but for now we need a quick backportable fix for systemd 226 guests. Signed-off-by: Serge Hallyn Acked-by: Stéphane Graber --- src/lxc/cgfs.c | 1 + src/lxc/cgmanager.c | 1 + src/lxc/cgroup.c | 14 ++++++++++++++ src/lxc/cgroup.h | 2 ++ 4 files changed, 18 insertions(+) diff --git a/src/lxc/cgfs.c b/src/lxc/cgfs.c index df2e6b233..d65f2d709 100644 --- a/src/lxc/cgfs.c +++ b/src/lxc/cgfs.c @@ -1220,6 +1220,7 @@ static char *lxc_cgroup_get_hierarchy_path_data(const char *subsystem, struct cg info = find_info_for_subsystem(info, subsystem); if (!info) return NULL; + prune_init_scope(info->cgroup_path); return info->cgroup_path; } diff --git a/src/lxc/cgmanager.c b/src/lxc/cgmanager.c index a677c22c7..f8689033b 100644 --- a/src/lxc/cgmanager.c +++ b/src/lxc/cgmanager.c @@ -776,6 +776,7 @@ static char *try_get_abs_cgroup(const char *name, const char *lxcpath, nerr = nih_error_get(); nih_free(nerr); } + prune_init_scope(cgroup); return cgroup; } diff --git a/src/lxc/cgroup.c b/src/lxc/cgroup.c index 2362ad8b3..b1c764f2b 100644 --- a/src/lxc/cgroup.c +++ b/src/lxc/cgroup.c @@ -194,3 +194,17 @@ cgroup_driver_t cgroup_driver(void) { return ops->driver; } + +#define INIT_SCOPE "/init.scope" +void prune_init_scope(char *cg) +{ + char *point = cg + strlen(cg) - strlen(INIT_SCOPE); + if (point < cg) + return; + if (strcmp(point, INIT_SCOPE) == 0) { + if (point == cg) + *(point+1) = '\0'; + else + *point = '\0'; + } +} diff --git a/src/lxc/cgroup.h b/src/lxc/cgroup.h index 670693991..7704c04d3 100644 --- a/src/lxc/cgroup.h +++ b/src/lxc/cgroup.h @@ -80,4 +80,6 @@ extern bool cgroup_unfreeze(struct lxc_handler *handler); extern void cgroup_disconnect(void); extern cgroup_driver_t cgroup_driver(void); +extern void prune_init_scope(char *cg); + #endif