Store the cgroup version in struct cgroup_controller.  Each
controller can be mounted separately, and thus the cgroup
version is applicable at the controller level.

Signed-off-by: Tom Hromatka <tom.hroma...@oracle.com>
---
 src/libcgroup-internal.h | 13 +++++++------
 src/wrapper.c            | 11 ++++++++++-
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/src/libcgroup-internal.h b/src/libcgroup-internal.h
index 0367c60a91ec..0098d9d80a0a 100644
--- a/src/libcgroup-internal.h
+++ b/src/libcgroup-internal.h
@@ -83,6 +83,12 @@ __BEGIN_DECLS
 #define max(x,y) ((y)<(x)?(x):(y))
 #define min(x,y) ((y)>(x)?(x):(y))
 
+enum cg_version_t {
+       CGROUP_UNK = 0,
+       CGROUP_V1,
+       CGROUP_V2,
+};
+
 struct control_value {
        char name[FILENAME_MAX];
        char value[CG_CONTROL_VALUE_MAX];
@@ -97,6 +103,7 @@ struct cgroup_controller {
        struct control_value *values[CG_NV_MAX];
        struct cgroup *cgroup;
        int index;
+       enum cg_version_t version;
 };
 
 struct cgroup {
@@ -117,12 +124,6 @@ struct cg_mount_point {
        struct cg_mount_point *next;
 };
 
-enum cg_version_t {
-       CGROUP_UNK = 0,
-       CGROUP_V1,
-       CGROUP_V2,
-};
-
 struct cg_mount_table_s {
        /** Controller name. */
        char name[FILENAME_MAX];
diff --git a/src/wrapper.c b/src/wrapper.c
index 966cb8490102..e618d9655cfa 100644
--- a/src/wrapper.c
+++ b/src/wrapper.c
@@ -56,7 +56,7 @@ struct cgroup *cgroup_new_cgroup(const char *name)
 struct cgroup_controller *cgroup_add_controller(struct cgroup *cgroup,
                                                        const char *name)
 {
-       int i;
+       int i, ret;
        struct cgroup_controller *controller;
 
        if (!cgroup)
@@ -86,6 +86,15 @@ struct cgroup_controller *cgroup_add_controller(struct 
cgroup *cgroup,
        controller->cgroup = cgroup;
        controller->index = 0;
 
+       ret = cgroup_get_controller_version(controller->name,
+                                           &controller->version);
+       if (ret) {
+               cgroup_dbg("failed to get cgroup version for controller %s\n",
+                          controller->name);
+               free(controller);
+               return NULL;
+       }
+
        cgroup->controller[cgroup->index] = controller;
        cgroup->index++;
 
-- 
2.26.2



_______________________________________________
Libcg-devel mailing list
Libcg-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to