]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
detect a cgroup named 'lxc'
authorDaniel Lezcano <daniel.lezcano@free.fr>
Mon, 13 Jul 2009 21:12:10 +0000 (23:12 +0200)
committerDaniel Lezcano <dlezcano@fr.ibm.com>
Mon, 13 Jul 2009 21:12:10 +0000 (23:12 +0200)
This patch makes lxc to detect a specific cgroup dedicated to lxc
which is mounted with the lxc name. That allows to mount different
cgroup in different places with different options (aka subsystems)
and assign one to be used by lxc. If no such mount point is found,
the first cgroup mount point is used.

Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
doc/lxc.sgml.in
src/lxc/cgroup.c

index 77795a54c49c810d1bdfeb266307bdeb89a5ff63..85988da3d523f8019376d9eb083f26a90e7bf0d4 100644 (file)
@@ -126,27 +126,36 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
       </programlisting>
 
       <para>
-       For the moment the easiest way to have all the features in the
-       kernel is to use the git tree at:
-       <systemitem>
-         git://git.kernel.org/pub/scm/linux/kernel/git/daveh/linux-2.6-lxc.git
-       </systemitem>
 
-       But the kernel version >= 2.6.27 shipped with the distros, may
+       The kernel version >= 2.6.27 shipped with the distros, will
        work with <command>lxc</command>, this one will have less
        functionalities but enough to be interesting.
 
-       The planned kernel version which <command>lxc</command> should
-       be fully functionaly is 2.6.29.
+       With the kernel 2.6.29, <command>lxc</command> is fully
+       functional.
       </para>
 
       <para>
        Before using the <command>lxc</command>, your system should be
        configured with the file capabilities, otherwise you will need
-       to run the <command>lxc</command> commands as root. The
-       control group should be mounted anywhere, eg:
-       <command>mount -t cgroup cgroup /cgroup</command>
+       to run the <command>lxc</command> commands as root.
       </para>
+
+      <para>
+         The control group can be mounted anywhere, eg:
+         <command>mount -t cgroup cgroup /cgroup</command>.
+
+         If you want to dedicate a specific cgroup mount point
+         for <command>lxc</command>, that is to have different cgroups
+         mounted at different places with different options but
+         let <command>lxc</command> to use one location, you can bind
+         the mount point with the <option>lxc</option> name, eg:
+         <command>mount -t cgroup lxc /cgroup4lxc</command> or
+         <command>mount -t cgroup -ons,cpuset,freezer,devices
+         lxc /cgroup4lxc</command>
+
+      </para>
+
   </refsect1>
 
   <refsect1>
index bc90b9aeac5643e15d35b40ab9aa44de02971e92..26440427a88b42ee07a7d34eba53848a92b9faa2 100644 (file)
@@ -58,11 +58,20 @@ static int get_cgroup_mount(const char *mtab, char *mnt)
         }
 
         while ((mntent = getmntent(file))) {
-                if (strcmp(mntent->mnt_type, "cgroup"))
-                        continue;
-                strcpy(mnt, mntent->mnt_dir);
-                err = 0;
-                break;
+
+               /* there is a cgroup mounted named "lxc" */
+               if (!strcmp(mntent->mnt_fsname, "lxc") &&
+                   !strcmp(mntent->mnt_type, "cgroup")) {
+                       strcpy(mnt, mntent->mnt_dir);
+                       err = 0;
+                       break;
+               }
+
+               /* fallback to the first non-lxc cgroup found */
+                if (!strcmp(mntent->mnt_type, "cgroup") && err) {
+                       strcpy(mnt, mntent->mnt_dir);
+                       err = 0;
+               }
         };
 
         fclose(file);
@@ -87,8 +96,7 @@ int lxc_rename_nsgroup(const char *name, pid_t pid)
 
        ret = rename(oldname, newname);
        if (ret)
-               SYSERROR("failed to rename cgroup %s->%s",
-                                oldname, newname);
+               SYSERROR("failed to rename cgroup %s->%s", oldname, newname);
        return ret;
 }
 
@@ -110,8 +118,7 @@ int lxc_link_nsgroup(const char *name)
        unlink(lxc);
        ret = symlink(nsgroup, lxc);
        if (ret)
-               SYSERROR("failed to create symlink %s->%s",
-                                nsgroup, lxc);
+               SYSERROR("failed to create symlink %s->%s", nsgroup, lxc);
       return ret;
 }