Commit c5c65fe1 authored by Pavel Emelyanov's avatar Pavel Emelyanov

mnt: Create roots in criu context

In case root task restore failure we'll have to remove the
roots yard dir from criu, so we have to create one by
criu to at least have the dit name.

It's OK to do it in criu, since the yards is created in
the opts.root which is the same for any mnt ns we deal
with on restore.
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent e3f5ba3c
......@@ -117,5 +117,6 @@ extern int fini_mnt_ns(void);
extern char *rst_get_mnt_root(int mnt_id);
extern int ext_mount_add(char *key, char *val);
extern int mntns_maybe_create_roots(void);
#endif /* __CR_MOUNT_H__ */
......@@ -2529,16 +2529,6 @@ static int read_mnt_ns_img(void)
if (nsid->nd != &mnt_ns_desc)
continue;
if (nsid->type != NS_ROOT) {
BUG_ON(nsid->type == NS_CRIU);
/*
* If we have more than one (root) namespace,
* then we'll need the roots yard.
*/
if (create_mnt_roots())
return -1;
}
if (collect_mnt_from_image(&pms, nsid))
return -1;
}
......@@ -2568,6 +2558,32 @@ char *rst_get_mnt_root(int mnt_id)
return path;
}
int mntns_maybe_create_roots(void)
{
struct ns_id *ns;
if (!(root_ns_mask & CLONE_NEWNS))
return 0;
for (ns = ns_ids; ns != NULL; ns = ns->next) {
if (ns->nd != &mnt_ns_desc)
continue;
if (ns->type != NS_ROOT) {
BUG_ON(ns->type == NS_CRIU);
/*
* If we have more than one (root) namespace,
* then we'll need the roots yard.
*/
return create_mnt_roots();
}
}
/* No "other" mntns found, just go ahead, we don't need roots yard. */
return 0;
}
static int do_restore_task_mnt_ns(struct ns_id *nsid, struct pstree_item *current)
{
char path[PATH_MAX];
......
......@@ -1321,8 +1321,16 @@ int prepare_namespace_before_tasks(void)
if (netns_keep_nsfd())
goto err_netns;
if (mntns_maybe_create_roots())
goto err_mnt;
return 0;
err_mnt:
/*
* Nothing, netns' descriptor will be closed
* on criu exit
*/
err_netns:
stop_usernsd();
err_unds:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment