[CRIU] [PATCH] cgroup: actually detect cgroupns bind mounts correctly
Pavel Emelyanov
xemul at virtuozzo.com
Wed Aug 10 06:35:18 PDT 2016
On 08/09/2016 01:36 AM, Tycho Andersen wrote:
> Initially, the cgroupns patchset that went into the Ubuntu kernels had the
> nsroot= argument in mountopts, which allowed us to distinguish between
> cgroupfs mounts. The upstream kernel doesn't have this (the reasoning was
> that it showed up in the root field of mountinfo), so all cgroup mounts
> look idential if we don't consider the root mount, and we wrongly detect
> the mounts as bind mounts. Instead, let's remember the root path and
> compare this when considering when a mount is a bind mount.
>
> This patch is a little ugly because it intorduces cgroup specific behavior
> into the generic code, which we've thus far been able to avoid. One way to
> deal with this might be able to add a ->sb_equal hook to the fstype struct
> that could compare mountinfos' superblocks, and then fall back to
> mounts_sb_equal if that isn't present. Or we can leave this specific code
> in the generic bits until more of these appear. Either way is fine with me.
>
> Signed-off-by: Tycho Andersen <tycho.andersen at canonical.com>
> ---
> criu/mount.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/criu/mount.c b/criu/mount.c
> index f90ec69..de13915 100644
> --- a/criu/mount.c
> +++ b/criu/mount.c
> @@ -721,6 +721,9 @@ static struct mount_info *find_best_external_match(struct mount_info *list, stru
> if (!mounts_sb_equal(info, it))
> continue;
>
> + if (info->fstype->code == FSTYPE__CGROUP && strcmp(info->private, it->private))
> + continue;
Shouldn't this be rather in mounts_sb_equal()?
And, BTW, what's there in cgroup's mi->private?
> +
> /*
> * This means we have a situation like:
> *
> @@ -1602,7 +1605,7 @@ static int cgroup_parse(struct mount_info *pm)
> /* cgroup namespaced mounts don't look rooted to CRIU, so let's fake it
> * here.
> */
> - xfree(pm->root);
> + pm->private = pm->root;
> pm->root = xstrdup("/");
> if (!pm->root)
> return -1;
>
More information about the CRIU
mailing list