Commit addbc255 authored by Andrew Vagin's avatar Andrew Vagin Committed by Pavel Emelyanov

mnt: Fix slave mounts order estimation in can_mount_now

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-39957Signed-off-by: 's avatarAndrew Vagin <avagin@odin.com>
Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 1a6de2c6
...@@ -2125,8 +2125,23 @@ static bool can_mount_now(struct mount_info *mi) ...@@ -2125,8 +2125,23 @@ static bool can_mount_now(struct mount_info *mi)
if (mi->external) if (mi->external)
return true; return true;
if (mi->master_id && mi->bind == NULL) /*
* 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; return false;
}
}
if (!fsroot_mounted(mi) && (mi->bind == NULL && !mi->need_plugin && !mi->external)) if (!fsroot_mounted(mi) && (mi->bind == NULL && !mi->need_plugin && !mi->external))
return false; return false;
...@@ -2143,9 +2158,6 @@ static bool can_mount_now(struct mount_info *mi) ...@@ -2143,9 +2158,6 @@ static bool can_mount_now(struct mount_info *mi)
list_for_each_entry(n, &p->mnt_share, mnt_share) list_for_each_entry(n, &p->mnt_share, mnt_share)
if (!n->mounted) if (!n->mounted)
return false; return false;
list_for_each_entry(n, &p->mnt_slave_list, mnt_slave)
if (!n->mounted)
return false;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment