[CRIU] [PATCH 4/4] mnt: Use ns walking helper
Pavel Emelyanov
xemul at parallels.com
Thu Oct 9 06:43:36 PDT 2014
Signed-off-by: Pavel Emelyanov <xemul at parallels.com>
---
mount.c | 58 +++++++++++++++++++++-------------------------------------
1 file changed, 21 insertions(+), 37 deletions(-)
diff --git a/mount.c b/mount.c
index f828ed2..1503095 100644
--- a/mount.c
+++ b/mount.c
@@ -2076,52 +2076,36 @@ int mntns_get_root_by_mnt_id(int mnt_id)
return mntns_get_root_fd(mntns);
}
-int collect_mnt_namespaces(void)
+static int collect_mntns(struct ns_id *ns, void *oarg)
{
struct mount_info *pms;
- struct ns_id *ns;
- int ret = -1;
- for (ns = ns_ids; ns; ns = ns->next) {
- if (!(ns->nd->cflag & CLONE_NEWNS))
- continue;
+ pms = collect_mntinfo(ns);
+ if (!pms)
+ return -1;
- if (ns->pid == getpid()) {
- /*
- * Collect criu's mounts only if the target
- * task does NOT live in mount namespaces to
- * make smart paths resolution work.
- *
- * Otherwise, the necessary list of mounts
- * will be collected below.
- */
- if ((root_ns_mask & CLONE_NEWNS))
- continue;
+ if (ns->pid != getpid())
+ *(int *)oarg = 1;
- mntinfo = collect_mntinfo(ns);
- if (mntinfo == NULL)
- goto err;
- /*
- * 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;
- }
+ mntinfo_add_list(pms);
+ return 0;
+}
- pr_info("Dump MNT namespace (mountpoints) %d via %d\n", ns->id, ns->pid);
- pms = collect_mntinfo(ns);
- if (pms == NULL)
- goto err;
+int collect_mnt_namespaces(void)
+{
+ int need_to_validate = 0, ret;
+
+ ret = walk_namespaces(&mnt_ns_desc, collect_mntns, &need_to_validate);
+ if (ret)
+ goto err;
- mntinfo_add_list(pms);
+ if (need_to_validate) {
+ if (collect_shared(mntinfo))
+ goto err;
+ if (validate_mounts(mntinfo, true))
+ goto err;
}
- if (collect_shared(mntinfo))
- goto err;
- if (validate_mounts(mntinfo, true))
- goto err;
-out:
ret = 0;
err:
return ret;
--
1.8.4.2
More information about the CRIU
mailing list