[CRIU] [PATCH 1/3] mount: cut a common part of sources for bind-mounts

Andrey Vagin avagin at openvz.org
Thu Apr 10 03:52:32 PDT 2014


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

diff --git a/mount.c b/mount.c
index 3a37033..c7fba51 100644
--- a/mount.c
+++ b/mount.c
@@ -1137,11 +1137,22 @@ static int restore_ext_mount(struct mount_info *mi)
 
 static int do_bind_mount(struct mount_info *mi)
 {
-	char rpath[PATH_MAX];
 	bool shared = mi->shared_id && mi->shared_id == mi->bind->shared_id;
 
 	if (!mi->need_plugin) {
-		snprintf(rpath, sizeof(rpath), "%s%s", mi->bind->mountpoint, mi->root);
+		char rpath[PATH_MAX];
+		int tok = 0;
+
+		/* Cut common part of root */
+		while (mi->root[tok] == mi->bind->root[tok]) {
+			tok++;
+			if (mi->bind->root[tok] == '\0')
+				break;
+			BUG_ON(mi->root[tok] == '\0');
+		}
+
+		snprintf(rpath, sizeof(rpath), "%s/%s",
+				mi->bind->mountpoint, mi->root + tok);
 		pr_info("\tBind %s to %s\n", rpath, mi->mountpoint);
 
 		if (mount(rpath, mi->mountpoint, NULL,
-- 
1.8.5.3



More information about the CRIU mailing list