[CRIU] [PATCH 03/11] mount: save remapped links on tmpfs

Andrey Vagin avagin at openvz.org
Sun Aug 3 11:31:17 PDT 2014


For that mnt namespaces should be dumped after files.

Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
 cr-dump.c |  6 +++++-
 mount.c   | 20 +++++++++++++++++++-
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/cr-dump.c b/cr-dump.c
index d8ad0fc..aa44b95 100644
--- a/cr-dump.c
+++ b/cr-dump.c
@@ -1803,7 +1803,7 @@ int cr_dump_tasks(pid_t pid)
 	if (collect_file_locks())
 		goto err;
 
-	if (dump_mnt_namespaces() < 0)
+	if (collect_mnt_namespaces() < 0)
 		goto err;
 
 	if (collect_sockets(pid))
@@ -1818,6 +1818,10 @@ int cr_dump_tasks(pid_t pid)
 			goto err;
 	}
 
+	/* MNT namespaces are  dumped after files to save remapped links */
+	if (dump_mnt_namespaces() < 0)
+		goto err;
+
 	if (dump_verify_tty_sids())
 		goto err;
 
diff --git a/mount.c b/mount.c
index 50171a3..80ed133 100644
--- a/mount.c
+++ b/mount.c
@@ -2123,7 +2123,25 @@ int collect_mnt_namespaces(void)
 int dump_mnt_namespaces(void)
 {
 	int n = 0;
-	return walk_mnt_ns(dump_mnt_ns, &n);
+	struct mount_info *pm = NULL, *m, *ml = NULL;
+
+	if (!(root_ns_mask & CLONE_NEWNS))
+		return 0;
+
+	for (ml = m = mntinfo; m; pm = m, m = m->next) {
+		if (ml->nsid == m->nsid)
+			continue;
+
+		pm->next = NULL;
+		if (dump_mnt_ns(ml->nsid, ml, &n))
+			return -1;
+		pm->next = m;
+		ml = m;
+	}
+	if (dump_mnt_ns(ml->nsid, ml, &n))
+		return -1;
+
+	return 0;
 }
 
 struct ns_desc mnt_ns_desc = NS_DESC_ENTRY(CLONE_NEWNS, "mnt");
-- 
1.8.5.3



More information about the CRIU mailing list