mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-31 14:25:49 +00:00
mounts: allow to customize root path for cr_pivot_root (v2)
We are going to restore nested mount namespaces and we will need to change root for each of them. v2: don't call chdir in a second time, because a path may be relative Signed-off-by: Andrey Vagin <avagin@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
committed by
Pavel Emelyanov
parent
d738cf3e0f
commit
0989d3fdf9
18
mount.c
18
mount.c
@@ -1281,11 +1281,18 @@ static int clean_mnt_ns(void)
|
||||
return mnt_tree_for_each_reverse(mntinfo_tree, do_umount_one);
|
||||
}
|
||||
|
||||
static int cr_pivot_root(void)
|
||||
static int cr_pivot_root(char *root)
|
||||
{
|
||||
char put_root[] = "crtools-put-root.XXXXXX";
|
||||
|
||||
pr_info("Move the root to %s\n", opts.root);
|
||||
pr_info("Move the root to %s\n", root ? : ".");
|
||||
|
||||
if (root) {
|
||||
if (chdir(root)) {
|
||||
pr_perror("chdir(%s) failed", root);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (mkdtemp(put_root) == NULL) {
|
||||
pr_perror("Can't create a temporary directory");
|
||||
@@ -1304,6 +1311,11 @@ static int cr_pivot_root(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (mount("none", put_root, "none", MS_REC|MS_PRIVATE, NULL)) {
|
||||
pr_perror("Can't remount root with MS_PRIVATE");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (umount2(put_root, MNT_DETACH)) {
|
||||
pr_perror("Can't umount %s", put_root);
|
||||
return -1;
|
||||
@@ -1523,7 +1535,7 @@ int prepare_mnt_ns(int ns_pid)
|
||||
goto out;
|
||||
|
||||
if (opts.root)
|
||||
ret = cr_pivot_root();
|
||||
ret = cr_pivot_root(NULL);
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
Reference in New Issue
Block a user