diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c index 71dfe72e6..4aa8fe160 100644 --- a/src/lxc/cgroups/cgfsng.c +++ b/src/lxc/cgroups/cgfsng.c @@ -1152,6 +1152,7 @@ __cgfsng_ops static void cgfsng_monitor_destroy(struct cgroup_ops *ops, for (int i = 0; ops->hierarchies[i]; i++) { int ret; + char *chop; struct hierarchy *h = ops->hierarchies[i]; if (!h->monitor_full_path) @@ -1169,16 +1170,27 @@ __cgfsng_ops static void cgfsng_monitor_destroy(struct cgroup_ops *ops, PIVOT_CGROUP, "cgroup.procs", NULL); + chop = strrchr(pivot_path, '/'); + if (chop) + *chop = '\0'; + ret = mkdir_p(pivot_path, 0755); - if (ret < 0 && errno != EEXIST) + if (ret < 0 && errno != EEXIST) { + SYSWARN("Failed to create cgroup \"%s\"\n", pivot_path); goto next; + } + + if (chop) + *chop = '/'; /* Move ourselves into the pivot cgroup to delete our own * cgroup. */ ret = lxc_write_to_file(pivot_path, pidstr, len, false, 0666); - if (ret != 0) + if (ret != 0) { + SYSWARN("Failed to move monitor %s to \"%s\"\n", pidstr, pivot_path); goto next; + } ret = recursive_destroy(h->monitor_full_path); if (ret < 0)