2
0
mirror of https://github.com/checkpoint-restore/criu synced 2025-08-30 05:48:05 +00:00

mount: validate mounts only once on dump (v3)

mntinfo contains mounts from all namespaces, so we can validate it only
once after collecting mounts.

v2: add a fake comment about goto
v3: add a real comment about goto
Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
Andrey Vagin 2014-09-12 16:52:00 +04:00 committed by Pavel Emelyanov
parent 32b032b61c
commit aadc309a4f

14
mount.c
View File

@ -992,9 +992,6 @@ static int dump_mnt_ns(struct ns_id *ns, struct mount_info *pms)
int img_fd = -1, ret = -1;
int ns_id = ns->id;
if (validate_mounts(pms, true))
goto err;
pr_info("Dumping mountpoints\n");
img_fd = open_image(CR_FD_MNTS, O_DUMP, ns_id);
if (img_fd < 0)
@ -2095,8 +2092,12 @@ static int walk_mnt_ns(int (*cb)(struct ns_id *, struct mount_info *, void *), v
if (mntinfo == NULL)
goto err;
}
continue;
/*
* Mount namespaces are dumped only if the root task lives in
* its own mntns, so we can stop enumeration of namespaces.
* We are not going to dump this tree, so we skip validation.
*/
goto out;
}
pr_info("Dump MNT namespace (mountpoints) %d via %d\n", ns->id, ns->pid);
@ -2111,6 +2112,9 @@ static int walk_mnt_ns(int (*cb)(struct ns_id *, struct mount_info *, void *), v
}
if (collect_shared(mntinfo))
goto err;
if (validate_mounts(mntinfo, true))
goto err;
out:
ret = 0;
err:
return ret;