[CRIU] [PATCH 2/4] mount: add the mnt_roots mount in the mount tree on restore

Andrey Vagin avagin at openvz.org
Mon Nov 10 14:24:54 PST 2014


Currently we connect roots of sub-namespaces to the root of the root
mount namespace. And we get problems, if the root of the root mntns is
shared, because all children of a shared mount must be propagated to
other mounts in this group.

Actually we mount tmpfs in mnt_roots and here is nothing wrong to add it
in a tree.

Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
 mount.c | 30 +++++++++++++++++++++++-------
 1 file changed, 23 insertions(+), 7 deletions(-)

diff --git a/mount.c b/mount.c
index 7751d84..2b5a50c 100644
--- a/mount.c
+++ b/mount.c
@@ -238,9 +238,26 @@ static bool mounts_equal(struct mount_info* mi, struct mount_info *c, bool bind)
 	return true;
 }
 
+/*
+ * mnt_roots is a temporary directory for restoring sub-trees of
+ * non-root namespaces.
+ */
+static char *mnt_roots;
+
 static struct mount_info *mnt_build_ids_tree(struct mount_info *list)
 {
 	struct mount_info *m, *root = NULL;
+	struct mount_info *tmp_root_mount = NULL;
+
+	if (mnt_roots) {
+		/* mnt_roots is a tmpfs mount and it's private */
+		tmp_root_mount = mnt_entry_alloc();
+		if (!tmp_root_mount)
+			return NULL;
+
+		tmp_root_mount->mountpoint = mnt_roots;
+		tmp_root_mount->mounted = true;
+	}
 
 	/*
 	 * Just resolve the mnt_id:parent_mnt_id relations
@@ -280,7 +297,7 @@ static struct mount_info *mnt_build_ids_tree(struct mount_info *list)
 				 * root mount namespace, so its parent is
 				 * the main root.
 				 */
-				p = root;
+				p = tmp_root_mount;
 			} else
 				return NULL;
 		}
@@ -294,6 +311,11 @@ static struct mount_info *mnt_build_ids_tree(struct mount_info *list)
 		return NULL;
 	}
 
+	if (mnt_roots) {
+		tmp_root_mount->parent = root;
+		list_add_tail(&tmp_root_mount->siblings, &root->children);
+	}
+
 	return root;
 }
 
@@ -1704,12 +1726,6 @@ void mnt_entry_free(struct mount_info *mi)
 }
 
 /*
- * mnt_roots is a temporary directory for restoring sub-trees of
- * non-root namespaces.
- */
-static char *mnt_roots;
-
-/*
  * Helper for getting a path to where the namespace's root
  * is re-constructed.
  */
-- 
1.9.3



More information about the CRIU mailing list