Call it on mount points tree building and abort in case NFS is overmounted. This logic replaces the old one, which was checking for unsupported NFS monut in validate_mounts. And the reason is that call to validate_mounts depends on user argument, which is unsuitable for this case.
Signed-off-by: Stanislav Kinsburskiy <skinsbur...@virtuozzo.com> --- criu/mount.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/criu/mount.c b/criu/mount.c index 942515e..46ad66c 100644 --- a/criu/mount.c +++ b/criu/mount.c @@ -397,6 +397,25 @@ static bool mounts_equal(struct mount_info *a, struct mount_info *b) */ static char *mnt_roots; +static bool nfs_mount(const struct mount_info *m) +{ + return !strcmp(m->fstype->name, "nfs") || + !strcmp(m->fstype->name, "nfs4"); + +} + +static bool unsupported_mount(const struct mount_info *m) +{ + struct mount_info *parent = m->parent; + + if (m->parent && nfs_mount(parent)) { + pr_err("overmounted NFS (%s) is not supported yet:\n", + parent->mountpoint); + return true; + } + return false; +} + static struct mount_info *mnt_build_ids_tree(struct mount_info *list, struct mount_info *yard_mount) { struct mount_info *m, *root = NULL; @@ -457,6 +476,9 @@ static struct mount_info *mnt_build_ids_tree(struct mount_info *list, struct mou m->parent = parent; list_add_tail(&m->siblings, &parent->children); + + if (unsupported_mount(m)) + return NULL; } if (!root) { @@ -809,11 +831,6 @@ skip_fstype: m->mnt_id, m->mountpoint); return -1; } - - if (!strcmp(m->fstype->name, "nfs") && !list_empty(&m->children)) { - pr_err("overmounted NFS (%s) is not supported yet\n", m->mountpoint); - return -1; - } } return 0; _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel