Commit 3ea24eb8 by Christian Seiler Committed by Daniel Lezcano

Enable get_cgroup_mount to search for mount points satisfying multiple subsystems at once

lxc-attach functionality reads /proc/init_pid/cgroup to determine the cgroup of the container for a given subsystem. However, since subsystems may be mounted together, we want to be on the safe side and be sure that we really find the correct mount point, so we allow get_cgroup_mount to check for *all* the subsystems; the subsystem parameter may now be a comma-separated list. Signed-off-by: 's avatarDaniel Lezcano <dlezcano@fr.ibm.com>
parent e16dad10
...@@ -52,6 +52,35 @@ enum { ...@@ -52,6 +52,35 @@ enum {
CGROUP_CLONE_CHILDREN, CGROUP_CLONE_CHILDREN,
}; };
static char *hasmntopt_multiple(struct mntent *mntent, const char *options)
{
const char *ptr = options;
const char *ptr2 = strchr(options, ',');
char *result;
while (ptr2 != NULL) {
char *option = strndup(ptr, ptr2 - ptr);
if (!option) {
SYSERROR("Temporary memory allocation error");
return NULL;
}
result = hasmntopt(mntent, option);
free(option);
if (!result) {
return NULL;
}
ptr = ptr2 + 1;
ptr2 = strchr(ptr, ',');
}
/* for multiple mount options, the return value is basically NULL
* or non-NULL, so this should suffice for our purposes */
return hasmntopt(mntent, ptr);
}
static int get_cgroup_mount(const char *subsystem, char *mnt) static int get_cgroup_mount(const char *subsystem, char *mnt)
{ {
struct mntent *mntent; struct mntent *mntent;
...@@ -67,7 +96,7 @@ static int get_cgroup_mount(const char *subsystem, char *mnt) ...@@ -67,7 +96,7 @@ static int get_cgroup_mount(const char *subsystem, char *mnt)
if (strcmp(mntent->mnt_type, "cgroup")) if (strcmp(mntent->mnt_type, "cgroup"))
continue; continue;
if (!subsystem || hasmntopt(mntent, subsystem)) { if (!subsystem || hasmntopt_multiple(mntent, subsystem)) {
strcpy(mnt, mntent->mnt_dir); strcpy(mnt, mntent->mnt_dir);
fclose(file); fclose(file);
DEBUG("using cgroup mounted at '%s'", mnt); DEBUG("using cgroup mounted at '%s'", mnt);
......
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