[CRIU] [PATCH] mnt: Fix slave mounts order estimation in can_mount_now

Cyrill Gorcunov gorcunov at openvz.org
Fri Oct 9 04:06:53 PDT 2015


From: Andrew Vagin <avagin at odin.com>

For slave mount we need to make sure that all childrent
mountpoints of the master peer is mounted before we can
proceed otherwise there gonna be duplicated mountpoints
after the restore.

https://jira.sw.ru/browse/PSBM-39957

Signed-off-by: Andrew Vagin <avagin at odin.com>
Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
 mount.c | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/mount.c b/mount.c
index f5fe1517d6e3..2ed061592f86 100644
--- a/mount.c
+++ b/mount.c
@@ -2125,8 +2125,23 @@ static bool can_mount_now(struct mount_info *mi)
 	if (mi->external)
 		return true;
 
-	if (mi->master_id && mi->bind == NULL)
-		return false;
+	/*
+	 * We're the slave peer:
+	 *   - Make sure the master peer is already mounted
+	 *   - Make sure all children is mounted as well to
+	 *     eliminame mounts duplications
+	 */
+	if (mi->master_id) {
+		struct mount_info *c;
+
+		if (mi->bind == NULL)
+			return false;
+
+		list_for_each_entry(c, &mi->bind->children, siblings) {
+			if (!c->mounted)
+				return false;
+		}
+	}
 
 	if (!fsroot_mounted(mi) && (mi->bind == NULL && !mi->need_plugin && !mi->external))
 		return false;
@@ -2143,9 +2158,6 @@ static bool can_mount_now(struct mount_info *mi)
 			list_for_each_entry(n, &p->mnt_share, mnt_share)
 				if (!n->mounted)
 					return false;
-			list_for_each_entry(n, &p->mnt_slave_list, mnt_slave)
-				if (!n->mounted)
-					return false;
 		}
 	}
 
-- 
2.4.3



More information about the CRIU mailing list