Skip to content

Commit

Permalink
fix attach when cgroups mounted after container start
Browse files Browse the repository at this point in the history
When booting an OL7 container on OL6, systemd in the OL7 container mounted
some extra cgroup controllers, which are then present in /proc/self/cgroups
of every task on the host. This is the list used by attach to determine
which cgroups to move the attached task into, but when it asks the container
over the command interface for the path to the subsystem this will fail
since the controller didn't exist when the container was first started.

Instead of failing, this change allows the attach to continue, warning that
those cgroups that could not be found won't be attached to.

The problem can be more simply reproduced by starting a busybox container,
mounting a cgroup that was not previously mounted, and then attempting
to attach to to the busybox container.

The problem will likely not manifest with cgmanager since it only requests
the path for the first controller, which is likely to always be mounted.

Signed-off-by: Dwight Engen <dwight.engen@oracle.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
  • Loading branch information
Dwight Engen authored and stgraber committed Feb 27, 2014
1 parent 4eac991 commit 3efa3ba
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions src/lxc/cgfs.c
Expand Up @@ -1095,8 +1095,11 @@ static struct cgroup_process_info *lxc_cgroup_get_container_info(const char *nam

/* use the command interface to look for the cgroup */
path = lxc_cmd_get_cgroup_path(name, lxcpath, h->subsystems[0]);
if (!path)
goto out_error;
if (!path) {
h->used = false;
WARN("Not attaching to cgroup %s unknown to %s %s", h->subsystems[0], lxcpath, name);
continue;
}

entry = calloc(1, sizeof(struct cgroup_process_info));
if (!entry)
Expand Down

0 comments on commit 3efa3ba

Please sign in to comment.