From: Andrei Vagin <ava...@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 Signed-off-by: Andrei Vagin <ava...@virtuozzo.com> --- criu/mount.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/criu/mount.c b/criu/mount.c index d889732..50c5b79 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. + */ + 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; -- 1.8.3.1 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel