[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