[CRIU] [PATCH CRIU 1/4] mount: get over autodetected mounts in search for widest shared peer

Andrew Vagin avagin at virtuozzo.com
Wed Jan 20 10:23:01 PST 2016


On Wed, Jan 20, 2016 at 06:42:55PM +0300, Pavel Tikhomirov wrote:
> now all autodetected mounts are considered to be shared - fix it

I don't understand what and how you fix.

> 
> In VZ7:
> vzctl exec 101 mkdir /testmounts /testmounts/dir /testmounts/bind
> 	/testmounts/tmp /testmounts/dir/b
> vzctl exec 101 mount --bind /testmounts/dir /testmounts/bind
> vzctl exec 101 mount --bind /testmounts/tmp /testmounts/bind/b
> vzctl suspend 101; vzctl resume 101
> 
> In criu logs:
> The restore log was saved in /vz/private/101/dump/Dump/restore.log
> Failed to restore the Container
> 
> (00.213750)      1: Error (mount.c:631): mnt: 134:./testmounts/bind and
> 137:./testmounts/dir/b have different set of mounts
> 
> but those two are really different
> 
> https://jira.sw.ru/browse/PSBM-42829
> Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
> ---
>  mount.c | 17 +++++++++++++++--
>  1 file changed, 15 insertions(+), 2 deletions(-)
> 
> diff --git a/mount.c b/mount.c
> index 9d5667a..e267e10 100644
> --- a/mount.c
> +++ b/mount.c
> @@ -472,14 +472,27 @@ static int try_resolve_ext_mount(struct mount_info *info)
>  static struct mount_info *find_widest_shared(struct mount_info *m)
>  {
>  	struct mount_info *p;
> +	bool madm = !strcmp(m->root, AUTODETECTED_MOUNT);
>  
>  	/*
>  	 * Try to find a mount, which is wider or equal.
>  	 * A is wider than B, if A->root is a subpath of B->root.
>  	 */
> -	list_for_each_entry(p, &m->mnt_share, mnt_share)
> -		if (issubpath(m->root, p->root))
> +	list_for_each_entry(p, &m->mnt_share, mnt_share) {
> +		bool padm = !strcmp(p->root, AUTODETECTED_MOUNT);
> +
> +		/* Skip check between different kinds of mounts */
> +		if (madm != padm)
> +			continue;
> +
> +		/*
> +		 * Compare source for autodetected mounts as
> +		 * root is always "CRIU:AUTOGENERATED" for them
> +		 */
> +		if ((madm && issubpath(m->source, p->source))
> +		    || (!madm && issubpath(m->root, p->root)))
>  			return p;
> +	}
>  
>  	return NULL;
>  }
> -- 
> 1.9.3
> 


More information about the CRIU mailing list