cgroup_add_all_controllers function attach all mounted controllers to a given 
cgroup. This function just modifies internal libcgroup structure, not the 
kernel control group.
 input parameter: cgroup
 output parameter: zero or error number


Signed-off-by: Ivana Hutarova Varekova <varek...@redhat.com>
---
 include/libcgroup/groups.h |   10 +++++++++
 src/libcgroup.map          |    7 ++++++
 src/wrapper.c              |   50 ++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 67 insertions(+)

diff --git a/include/libcgroup/groups.h b/include/libcgroup/groups.h
index d5c87aa..201558f 100644
--- a/include/libcgroup/groups.h
+++ b/include/libcgroup/groups.h
@@ -150,6 +150,16 @@ struct cgroup_controller *cgroup_add_controller(struct 
cgroup *cgroup,
                                                const char *name);
 
 /**
+ * Attach all mounted controllers to given cgroup. This function just modifies
+ * internal libcgroup structure, not the kernel control group.
+ *
+ * @param cgroup
+ * @return zero or error number
+ */
+int cgroup_add_all_controllers(struct cgroup *cgroup);
+
+
+/**
  * Return appropriate controller from given group.
  * The controller must be added before using cgroup_add_controller() or loaded
  * from kernel using cgroup_get_cgroup().
diff --git a/src/libcgroup.map b/src/libcgroup.map
index f8b0fb9..8fe1990 100644
--- a/src/libcgroup.map
+++ b/src/libcgroup.map
@@ -122,3 +122,10 @@ CGROUP_0.40 {
        cgroup_templates_cache_set_source_files;
        cgroup_load_templates_cache_from_files;
 } CGROUP_0.39;
+
+CGROUP_0.41 {
+} CGROUP_0.40;
+
+CGROUP_0.42 {
+       cgroup_add_all_controllers;
+} CGROUP_0.41;
diff --git a/src/wrapper.c b/src/wrapper.c
index c03472a..3a9331f 100644
--- a/src/wrapper.c
+++ b/src/wrapper.c
@@ -92,6 +92,56 @@ struct cgroup_controller *cgroup_add_controller(struct 
cgroup *cgroup,
        return controller;
 }
 
+int cgroup_add_all_controllers(struct cgroup *cgroup)
+{
+       int ret;
+       void *handle;
+       struct controller_data info;
+       struct cgroup_controller *cgc;
+
+       /* go through the controller list */
+       ret = cgroup_get_all_controller_begin(&handle, &info);
+       if ((ret != 0) && (ret != ECGEOF)) {
+               fprintf(stderr, "cannot read controller data: %s\n",
+                       cgroup_strerror(ret));
+               return ret;
+       }
+
+       while (ret == 0) {
+               if (info.hierarchy == 0) {
+                       /* the controller is not attached to any hierarchy
+                          skip it */
+                       goto next;
+               }
+
+               /* add mounted controller to cgroup structure */
+               cgc = cgroup_add_controller(cgroup, info.name);
+               if (!cgc) {
+                       ret = ECGINVAL;
+                       fprintf(stderr, "controller %s can't be add\n",
+                               info.name);
+               }
+
+next:
+               ret = cgroup_get_all_controller_next(&handle, &info);
+               if (ret && ret != ECGEOF)
+                       goto end;
+       }
+
+end:
+       cgroup_get_all_controller_end(&handle);
+
+       if (ret == ECGEOF)
+               ret = 0;
+
+       if (ret)
+               fprintf(stderr,
+                       "cgroup_get_controller_begin/next failed (%s)\n",
+                       cgroup_strerror(ret));
+
+       return ret;
+}
+
 void cgroup_free_controllers(struct cgroup *cgroup)
 {
        int i, j;


------------------------------------------------------------------------------
Infragistics Professional
Build stunning WinForms apps today!
Reboot your WinForms applications with our WinForms controls. 
Build a bridge from your legacy apps to the future.
http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk
_______________________________________________
Libcg-devel mailing list
Libcg-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to