Add a function - cgroup_convert_cgroup() - that can convert from one cgroup version to another. This function will be the building block for the libcgroup abstraction layer.
Signed-off-by: Tom Hromatka <tom.hroma...@oracle.com> --- src/abstraction-common.c | 31 +++++++++++++++++++++++++++++++ src/abstraction-common.h | 17 +++++++++++++++++ src/libcgroup.map | 1 + 3 files changed, 49 insertions(+) diff --git a/src/abstraction-common.c b/src/abstraction-common.c index 8c57f1a07d8d..f69c8af28a4b 100644 --- a/src/abstraction-common.c +++ b/src/abstraction-common.c @@ -58,3 +58,34 @@ int cgroup_strtol(const char * const in_str, int base, out: return ret; } + +int cgroup_convert_cgroup(struct cgroup * const out_cgroup, + enum cg_version_t out_version, + const struct cgroup * const in_cgroup, + enum cg_version_t in_version) +{ + struct cgroup_controller *cgc; + int ret = 0; + int i; + + for (i = 0; i < in_cgroup->index; i++) { + cgc = cgroup_add_controller(out_cgroup, + in_cgroup->controller[i]->name); + if (cgc == NULL) { + ret = ECGFAIL; + goto out; + } + + /* the user has overridden the version */ + if (in_version == CGROUP_V1 || in_version == CGROUP_V2) { + in_cgroup->controller[i]->version = in_version; + } + + cgc->version = out_version; + + /* Controller conversions will go here */ + } + +out: + return ret; +} diff --git a/src/abstraction-common.h b/src/abstraction-common.h index 03275412a9e8..9a4e4d09fd77 100644 --- a/src/abstraction-common.h +++ b/src/abstraction-common.h @@ -39,6 +39,23 @@ __BEGIN_DECLS int cgroup_strtol(const char * const in_str, int base, long int * const out_value); +/** + * Convert from one cgroup version to another version + * + * @param out_cgroup Destination cgroup + * @param out_version Destination cgroup version + * @param in_cgroup Source cgroup + * @param in_version Source cgroup version, only used if set to v1 or v2 + * + * @return 0 on success + * ECGFAIL conversion failed + * ECGCONTROLLERNOTEQUAL incorrect controller version provided + */ +int cgroup_convert_cgroup(struct cgroup * const out_cgroup, + enum cg_version_t out_version, + const struct cgroup * const in_cgroup, + enum cg_version_t in_version); + __END_DECLS #endif /* __ABSTRACTION_COMMON */ diff --git a/src/libcgroup.map b/src/libcgroup.map index 896796566526..d3451a531e0f 100644 --- a/src/libcgroup.map +++ b/src/libcgroup.map @@ -137,4 +137,5 @@ CGROUP_0.43 { cgroup_test_subsys_mounted; cg_mount_table; cg_mount_table_lock; + cgroup_convert_cgroup; } CGROUP_0.42; -- 2.26.2 _______________________________________________ Libcg-devel mailing list Libcg-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libcg-devel