]> git.ipfire.org Git - thirdparty/libcgroup.git/commitdiff
libcgroup: Add support for named hierarchies.
authorDhaval Giani <dhaval.giani@gmail.com>
Mon, 17 May 2010 16:54:48 +0000 (18:54 +0200)
committerDhaval Giani <dhaval.giani@gmail.com>
Mon, 17 May 2010 21:50:15 +0000 (23:50 +0200)
This feature has been available in the kernel for sometime, but was missed by
libcgroup.

Add support for named hierarchies. The controller is identified as
name=<name> and used in such fashion.

Signed-off-by: Dhaval Giani <dhaval.giani@gmail.com>
src/api.c

index 2d4cd21e42a2051f3e9edaf289b92d546e9e2b98..53c94300b9ab5598afe5d9f703f50f6a257b7c61 100644 (file)
--- a/src/api.c
+++ b/src/api.c
@@ -759,6 +759,39 @@ int cgroup_init(void)
                                ent->mnt_opts, found_mnt);
                        found_mnt++;
                }
+
+               /*
+                * Doesn't match the controller.
+                * Check if it is a named hierarchy.
+                */
+               mntopt = hasmntopt(ent, "name");
+
+               if (mntopt) {
+                       mntopt = strtok_r(mntopt, ",", &strtok_buffer);
+                       /*
+                        * Check if it is a duplicate
+                        */
+                       duplicate = 0;
+                       for (j = 0; j < found_mnt; j++) {
+                               if (strncmp(mntopt, cg_mount_table[j].name,
+                                                       FILENAME_MAX) == 0) {
+                                       duplicate = 1;
+                                       break;
+                               }
+                       }
+
+                       if (duplicate) {
+                               cgroup_dbg("controller %s is already mounted on %s\n",
+                                       mntopt, cg_mount_table[j].path);
+                               continue;
+                       }
+
+                       strcpy(cg_mount_table[found_mnt].name, mntopt);
+                       strcpy(cg_mount_table[found_mnt].path, ent->mnt_dir);
+                       cgroup_dbg("Found cgroup option %s, count %d\n",
+                               ent->mnt_opts, found_mnt);
+                       found_mnt++;
+               }
        }
 
        free(temp_ent);