[CRIU] [PATCH] Skip restoring certain cgroup root directories when using full mode

Andrew Vagin avagin at gmail.com
Tue Aug 25 21:45:03 PDT 2015


On Wed, Aug 26, 2015 at 12:28:40AM -0400, Hui Kang wrote:
> On Wed, Aug 26, 2015 at 12:27 AM, Andrew Vagin <avagin at gmail.com> wrote:
> > On Tue, Aug 25, 2015 at 10:25:02PM -0400, Hui Kang wrote:
> >>
> >> Hi, Pavel
> >> I still have difficulty in producing the bug you described. I have
> >> /sys/fs/cgroup/cpuset (which is the root) and /sys/fs/cgroup/cpuset/A.
> >> I have added task 1001 to the root and 1002 to
> >> /sys/fs/cgroup/cpuset/A. The patch has no problem in restoring the the
> >> task in /A.
> >>
> >> If this is the not nested case you described, could you give more
> >> detailed about the case you think of? Thanks.
> >
> > I think I've reproduced this bug:
> > https://asciinema.org/a/cv3qlitwvvt2guyi2woaok056
> 
> Thanks. Will look into this.

I think we need something like this:

diff --git a/cgroup.c b/cgroup.c
index a4e0146..2c9c29f 100644
--- a/cgroup.c
+++ b/cgroup.c
@@ -992,6 +992,9 @@ static int prepare_cgroup_dir_properties(char *path, int off, CgroupDirEntry **e
                CgroupDirEntry *e = ents[i];
                size_t off2 = off;
 
+               if (strcmp(e->dir_name, "") == 0)
+                       goto skip; /* skip root cgroups */
+
                off2 += sprintf(path + off, "/%s", e->dir_name);
                if (e->n_properties > 0) {
                        for (j = 0; j < e->n_properties; ++j) {
@@ -1000,6 +1003,7 @@ static int prepare_cgroup_dir_properties(char *path, int off, CgroupDirEntry **e
                        }
                }
 
+skip:
                if (prepare_cgroup_dir_properties(path, off2, e->children, e->n_children) < 0)
                        return -1;
        }


> 
> - Hui
> 
> >
> >>
> >> - Hui
> >>
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu


More information about the CRIU mailing list