[Devel] [PATCH criu 2/3] mount: fix mounting non-root shared mounts
Andrey Vagin
avagin at openvz.org
Mon Nov 21 17:07:19 PST 2016
From: Andrei Vagin <avagin at openvz.org>
A widest mount of a shared group has to be mounted first and
then other mounts of this group has to be mounted from the first mount
to inherite the shared group.
https://jira.sw.ru/browse/PSBM-55494
Signed-off-by: Andrei Vagin <avagin at virtuozzo.com>
---
criu/mount.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/criu/mount.c b/criu/mount.c
index 76d1505..3a98e63 100644
--- a/criu/mount.c
+++ b/criu/mount.c
@@ -2444,7 +2444,9 @@ static int propagate_siblings(struct mount_info *mi)
* to inherite shared group or master id
*/
list_for_each_entry(t, &mi->mnt_share, mnt_share) {
- if (t->mounted || t->bind)
+ if (t->mounted)
+ continue;
+ if (t->bind && t->bind->shared_id == mi->shared_id)
continue;
pr_debug("\t\tBind share %s\n", t->mountpoint);
t->bind = mi;
@@ -2902,6 +2904,15 @@ static bool can_mount_now(struct mount_info *mi)
if (!fsroot_mounted(mi) && (mi->bind == NULL && !mi->need_plugin && !mi->external))
return false;
+ if (mi->bind && mi->shared_id != mi->bind->shared_id) {
+ struct mount_info *n;
+ int len;
+
+ len = strlen(mi->root);
+ list_for_each_entry(n, &mi->mnt_share, mnt_share)
+ if (len > strlen(n->root))
+ return false;
+ }
shared:
if (mi->parent->shared_id) {
struct mount_info *p = mi->parent, *n;
--
1.8.3.1
More information about the Devel
mailing list