Commit 9972fba5 by Serge Hallyn Committed by Stéphane Graber

Ignore trailing /init.scope in init cgroups

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: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com> Acked-by: 's avatarStéphane Graber <stgraber@ubuntu.com>
parent c66fc6e6
...@@ -1220,6 +1220,7 @@ static char *lxc_cgroup_get_hierarchy_path_data(const char *subsystem, struct cg ...@@ -1220,6 +1220,7 @@ static char *lxc_cgroup_get_hierarchy_path_data(const char *subsystem, struct cg
info = find_info_for_subsystem(info, subsystem); info = find_info_for_subsystem(info, subsystem);
if (!info) if (!info)
return NULL; return NULL;
prune_init_scope(info->cgroup_path);
return info->cgroup_path; return info->cgroup_path;
} }
......
...@@ -776,6 +776,7 @@ static char *try_get_abs_cgroup(const char *name, const char *lxcpath, ...@@ -776,6 +776,7 @@ static char *try_get_abs_cgroup(const char *name, const char *lxcpath,
nerr = nih_error_get(); nerr = nih_error_get();
nih_free(nerr); nih_free(nerr);
} }
prune_init_scope(cgroup);
return cgroup; return cgroup;
} }
......
...@@ -194,3 +194,17 @@ cgroup_driver_t cgroup_driver(void) ...@@ -194,3 +194,17 @@ cgroup_driver_t cgroup_driver(void)
{ {
return ops->driver; 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';
}
}
...@@ -80,4 +80,6 @@ extern bool cgroup_unfreeze(struct lxc_handler *handler); ...@@ -80,4 +80,6 @@ extern bool cgroup_unfreeze(struct lxc_handler *handler);
extern void cgroup_disconnect(void); extern void cgroup_disconnect(void);
extern cgroup_driver_t cgroup_driver(void); extern cgroup_driver_t cgroup_driver(void);
extern void prune_init_scope(char *cg);
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment