[CRIU] [PATCH 01/37] mounts: allow to customize root path for cr_pivot_root (v2)
Andrey Vagin
avagin at openvz.org
Fri Apr 18 07:42:39 PDT 2014
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 at openvz.org>
---
mount.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/mount.c b/mount.c
index be27df8..c5d15dd 100644
--- a/mount.c
+++ b/mount.c
@@ -1266,11 +1266,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");
@@ -1289,6 +1296,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;
@@ -1508,7 +1520,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;
}
--
1.8.5.3
More information about the CRIU
mailing list