[CRIU] [PATCH 32/39] mount: prepare to work without mnt_id

Andrey Vagin avagin at openvz.org
Mon Apr 21 07:23:42 PDT 2014


Kernels before 3.15 doesn't show mnt_id and mnt_id isn't saved in
images, if mntns isn't dumped.

Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
 include/mount.h |  1 +
 mount.c         | 24 ++++++++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/include/mount.h b/include/mount.h
index 25df359..729a638 100644
--- a/include/mount.h
+++ b/include/mount.h
@@ -4,6 +4,7 @@
 extern struct mount_info *mntinfo;
 
 extern int mntns_collect_root(pid_t pid);
+extern struct ns_id *lookup_nsid_by_mnt_id(int mnt_id);
 
 struct proc_mountinfo;
 
diff --git a/mount.c b/mount.c
index 6928934..6441bf6 100644
--- a/mount.c
+++ b/mount.c
@@ -1578,6 +1578,9 @@ char *rst_get_mnt_root(int mnt_id)
 	if (!(root_ns_mask & CLONE_NEWNS))
 		return path;
 
+	if (mnt_id  == -1)
+		return path;
+
 	m = lookup_mnt_id(mnt_id);
 	if (m == NULL)
 		return NULL;
@@ -1843,6 +1846,27 @@ set_root:
 	return ret;
 }
 
+struct ns_id *lookup_nsid_by_mnt_id(int mnt_id)
+{
+	struct mount_info *mi;
+
+	/*
+	 * Kernel before 3.15 doesn't show mnt_id for file descriptors.
+	 * mnt_id isn't saved for files, if mntns isn't dumped.
+	 * In both these cases we have only one root, so here
+	 * is not matter which mount will be restured.
+	 */
+	if (mnt_id == -1)
+		mi = mntinfo;
+	else
+		mi = lookup_mnt_id(mnt_id);
+
+	if (mi == NULL)
+		return NULL;
+
+	return mi->nsid;
+}
+
 int collect_mnt_namespaces(void)
 {
 	struct mount_info *pm;
-- 
1.8.5.3



More information about the CRIU mailing list