From aadc309a4fc8c83eac4c1d6ba8a7b925ae80bf2c Mon Sep 17 00:00:00 2001 From: Andrey Vagin Date: Fri, 12 Sep 2014 16:52:00 +0400 Subject: [PATCH] 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 Signed-off-by: Pavel Emelyanov --- mount.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/mount.c b/mount.c index 5e23e9d29..166961179 100644 --- a/mount.c +++ b/mount.c @@ -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;