This commit adds the lxc_cgroup_attach function that adds a pid to the tasks file of a specific cgroup in all subsystems. This is required for lxc-attach to be able to put newly started processes in the same cgroup as the container. --- src/lxc/cgroup.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ src/lxc/cgroup.h | 1 + 2 files changed, 48 insertions(+), 0 deletions(-)
diff --git a/src/lxc/cgroup.c b/src/lxc/cgroup.c index 6ae67bd..db5d2fa 100644 --- a/src/lxc/cgroup.c +++ b/src/lxc/cgroup.c @@ -433,3 +433,50 @@ int lxc_cgroup_nrtasks(const char *name) return count; } + +int lxc_cgroup_attach(const char *name, pid_t pid) +{ + char cgname[MAXPATHLEN]; + struct mntent *mntent; + FILE *file = NULL; + int err = -1; + int found = 0; + + file = setmntent(MTAB, "r"); + if (!file) { + SYSERROR("failed to open %s", MTAB); + return -1; + } + + while ((mntent = getmntent(file))) { + + DEBUG("checking '%s' (%s)", mntent->mnt_dir, mntent->mnt_type); + + if (!strcmp(mntent->mnt_type, "cgroup")) { + + INFO("[%d] found cgroup mounted at '%s',opts='%s'", + ++found, mntent->mnt_dir, mntent->mnt_opts); + + snprintf(cgname, MAXPATHLEN, "%s/%s", + mntent->mnt_dir, name); + + if (access(cgname, F_OK)) { + ERROR("No cgroup '%s' found " + "in subsystem mounted at '%s'", + name, mntent->mnt_dir); + goto out; + } + + err = cgroup_attach(cgname, pid); + if (err) + goto out; + } + }; + + if (!found) + ERROR("No cgroup mounted on the system"); + +out: + endmntent(file); + return err; +} diff --git a/src/lxc/cgroup.h b/src/lxc/cgroup.h index 31dd2de..3c90696 100644 --- a/src/lxc/cgroup.h +++ b/src/lxc/cgroup.h @@ -30,5 +30,6 @@ extern int lxc_cgroup_create(const char *name, pid_t pid); extern int lxc_cgroup_destroy(const char *name); extern int lxc_cgroup_path_get(char **path, const char *subsystem, const char *name); extern int lxc_cgroup_nrtasks(const char *name); +extern int lxc_cgroup_attach(const char *name, pid_t pid); extern int lxc_ns_is_mounted(void); #endif -- 1.7.2.5 ------------------------------------------------------------------------------ Try before you buy = See our experts in action! The most comprehensive online learning library for Microsoft developers is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when you subscribe now! http://p.sf.net/sfu/learndevnow-dev2 _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel