Commit a156301a 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 0e86d94a
...@@ -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;
} }
......
...@@ -767,6 +767,7 @@ static char *try_get_abs_cgroup(const char *name, const char *lxcpath, ...@@ -767,6 +767,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;
} }
......
...@@ -173,3 +173,17 @@ void cgroup_disconnect(void) ...@@ -173,3 +173,17 @@ void cgroup_disconnect(void)
if (ops && ops->disconnect) if (ops && ops->disconnect)
ops->disconnect(); ops->disconnect();
} }
#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';
}
}
...@@ -67,4 +67,6 @@ extern const char *cgroup_get_cgroup(struct lxc_handler *handler, const char *su ...@@ -67,4 +67,6 @@ extern const char *cgroup_get_cgroup(struct lxc_handler *handler, const char *su
extern bool cgroup_unfreeze(struct lxc_handler *handler); extern bool cgroup_unfreeze(struct lxc_handler *handler);
extern void cgroup_disconnect(void); extern void cgroup_disconnect(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