[CRIU] [PATCH 5/6] mount: clone a mount namespace to open a detached mount

Pavel Emelyanov xemul at virtuozzo.com
Mon Feb 6 02:12:48 PST 2017


On 01/04/2017 02:40 AM, Andrei Vagin wrote:
> From: Andrei Vagin <avagin at virtuozzo.com>
> 
> If we can't create a temporary directory for a detached mount,
> we can clone a whole mount namespace, open a mount and release
> the created namespace. The result will be the same.
> 
> https://jira.sw.ru/browse/PSBM-57135
> https://github.com/opencontainers/runc/issues/1202
> Signed-off-by: Andrei Vagin <avagin at virtuozzo.com>
> ---
>  criu/mount.c | 18 +++++++++++++++---
>  1 file changed, 15 insertions(+), 3 deletions(-)
> 
> diff --git a/criu/mount.c b/criu/mount.c
> index 4749f59..c0bf234 100644
> --- a/criu/mount.c
> +++ b/criu/mount.c
> @@ -1123,10 +1123,22 @@ int open_mountpoint(struct mount_info *pm)
>  		goto out;
>  
>  	mnt_path = get_clean_mnt(pm, mnt_path_tmp, mnt_path_root);
> -	if (mnt_path == NULL)
> -		goto out;
> +	if (mnt_path == NULL) {
> +		/*
> +		 * We probably can't create a temporary direcotry,
> +		 * so we can try to clone the mount namespace, open
> +		 * the required mount and destroy this mount namespace.
> +		 */

Creation is seen (unshare), where is the destruction part?

> +		if (unshare(CLONE_NEWNS)) {
> +			pr_perror("Unable to clone a mount namespace");
> +			goto out;
> +		}
>  
> -	fd = open_detach_mount(mnt_path);
> +		fd = open(pm->mountpoint, O_RDONLY | O_DIRECTORY, 0);
> +		if (fd < 0)
> +			pr_perror("Can't open directory %s: %d", pm->mountpoint, fd);
> +	} else
> +		fd = open_detach_mount(mnt_path);
>  	if (fd < 0)
>  		goto out;
>  
> 



More information about the CRIU mailing list