diff options
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/cgroup-util.c | 15 | ||||
-rw-r--r-- | src/shared/cgroup-util.h | 4 |
2 files changed, 15 insertions, 4 deletions
diff --git a/src/shared/cgroup-util.c b/src/shared/cgroup-util.c index 9692a07f56..1aa81c2cd1 100644 --- a/src/shared/cgroup-util.c +++ b/src/shared/cgroup-util.c @@ -1668,7 +1668,7 @@ int cg_attach_many_everywhere(CGroupControllerMask supported, const char *path, return r; } -int cg_migrate_everywhere(CGroupControllerMask supported, const char *from, const char *to) { +int cg_migrate_everywhere(CGroupControllerMask supported, const char *from, const char *to, cg_migrate_callback_t to_callback, void *userdata) { CGroupControllerMask bit = 1; const char *n; int r; @@ -1680,8 +1680,17 @@ int cg_migrate_everywhere(CGroupControllerMask supported, const char *from, cons } NULSTR_FOREACH(n, mask_names) { - if (supported & bit) - cg_migrate_recursive_fallback(SYSTEMD_CGROUP_CONTROLLER, to, n, to, false, false); + if (supported & bit) { + const char *p = NULL; + + if (to_callback) + p = to_callback(bit, userdata); + + if (!p) + p = to; + + cg_migrate_recursive_fallback(SYSTEMD_CGROUP_CONTROLLER, to, n, p, false, false); + } bit <<= 1; } diff --git a/src/shared/cgroup-util.h b/src/shared/cgroup-util.h index 743d902e2d..aca4e44c46 100644 --- a/src/shared/cgroup-util.h +++ b/src/shared/cgroup-util.h @@ -122,10 +122,12 @@ bool cg_controller_is_valid(const char *p, bool allow_named); int cg_slice_to_path(const char *unit, char **ret); +typedef const char* (*cg_migrate_callback_t)(CGroupControllerMask mask, void *userdata); + int cg_create_everywhere(CGroupControllerMask supported, CGroupControllerMask mask, const char *path); int cg_attach_everywhere(CGroupControllerMask supported, const char *path, pid_t pid); int cg_attach_many_everywhere(CGroupControllerMask supported, const char *path, Set* pids); -int cg_migrate_everywhere(CGroupControllerMask supported, const char *from, const char *to); +int cg_migrate_everywhere(CGroupControllerMask supported, const char *from, const char *to, cg_migrate_callback_t callback, void *userdata); int cg_trim_everywhere(CGroupControllerMask supported, const char *path, bool delete_root); CGroupControllerMask cg_mask_supported(void); |