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 <[email protected]> --- criu/mount.c | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/criu/mount.c b/criu/mount.c index cc54e68..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) { @@ -739,16 +761,6 @@ static bool mnt_is_external(struct mount_info *m) return 0; } -static bool unsupported_nfs_mount(struct mount_info *m) -{ - if (!list_empty(&m->children)) { - pr_err("overmounted NFS (%s) is not supported yet\n", - m->mountpoint); - return true; - } - return false; -} - static int validate_mounts(struct mount_info *info, bool for_dump) { struct mount_info *m, *t; @@ -819,9 +831,6 @@ skip_fstype: m->mnt_id, m->mountpoint); return -1; } - - if (!strcmp(m->fstype->name, "nfs") && unsupported_nfs_mount(m)) - return -1; } return 0; _______________________________________________ Devel mailing list [email protected] https://lists.openvz.org/mailman/listinfo/devel
