diff --git a/criu/cgroup.c b/criu/cgroup.c index bbfe91eb1..ae7cd4932 100644 --- a/criu/cgroup.c +++ b/criu/cgroup.c @@ -545,9 +545,10 @@ static int collect_cgroups(struct list_head *ctls) int fd = -1; list_for_each_entry(cc, ctls, l) { - char path[PATH_MAX], mopts[1024]; + char path[PATH_MAX], mopts[1024], *root; char prefix[] = ".criu.cgmounts.XXXXXX"; struct cg_controller *cg; + struct cg_root_opt *o; current_controller = NULL; @@ -602,7 +603,17 @@ static int collect_cgroups(struct list_head *ctls) return -1; path_pref_len = snprintf(path, PATH_MAX, "/proc/self/fd/%d", fd); - snprintf(path + path_pref_len, PATH_MAX - path_pref_len, "%s", cc->path); + + root = cc->path; + if (opts.new_global_cg_root) + root = opts.new_global_cg_root; + + list_for_each_entry(o, &opts.new_cgroup_roots, node) { + if (!strcmp(cc->name, o->controller)) + root = o->newroot; + } + + snprintf(path + path_pref_len, PATH_MAX - path_pref_len, "%s", root); ret = ftw(path, add_cgroup, 4); if (ret < 0)