mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-07-28 20:42:49 +00:00
mount: add the mnt_roots mount in the mount tree on restore
Currently we connect roots of sub-namespaces to the root of the root mount namespace. And we get problems, if the root of the root mntns is shared, because all children of a shared mount must be propagated to other mounts in this group. Actually we mount tmpfs in mnt_roots and here is nothing wrong to add it in a tree. Signed-off-by: Andrey Vagin <avagin@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
parent
4e7064cd7e
commit
beeabc3b2b
1 changed files with 23 additions and 7 deletions
30
mount.c
30
mount.c
|
|
@ -238,9 +238,26 @@ static bool mounts_equal(struct mount_info* mi, struct mount_info *c, bool bind)
|
|||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* mnt_roots is a temporary directory for restoring sub-trees of
|
||||
* non-root namespaces.
|
||||
*/
|
||||
static char *mnt_roots;
|
||||
|
||||
static struct mount_info *mnt_build_ids_tree(struct mount_info *list)
|
||||
{
|
||||
struct mount_info *m, *root = NULL;
|
||||
struct mount_info *tmp_root_mount = NULL;
|
||||
|
||||
if (mnt_roots) {
|
||||
/* mnt_roots is a tmpfs mount and it's private */
|
||||
tmp_root_mount = mnt_entry_alloc();
|
||||
if (!tmp_root_mount)
|
||||
return NULL;
|
||||
|
||||
tmp_root_mount->mountpoint = mnt_roots;
|
||||
tmp_root_mount->mounted = true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Just resolve the mnt_id:parent_mnt_id relations
|
||||
|
|
@ -280,7 +297,7 @@ static struct mount_info *mnt_build_ids_tree(struct mount_info *list)
|
|||
* root mount namespace, so its parent is
|
||||
* the main root.
|
||||
*/
|
||||
p = root;
|
||||
p = tmp_root_mount;
|
||||
} else
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -294,6 +311,11 @@ static struct mount_info *mnt_build_ids_tree(struct mount_info *list)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
if (mnt_roots) {
|
||||
tmp_root_mount->parent = root;
|
||||
list_add_tail(&tmp_root_mount->siblings, &root->children);
|
||||
}
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
|
|
@ -1749,12 +1771,6 @@ void mnt_entry_free(struct mount_info *mi)
|
|||
xfree(mi);
|
||||
}
|
||||
|
||||
/*
|
||||
* mnt_roots is a temporary directory for restoring sub-trees of
|
||||
* non-root namespaces.
|
||||
*/
|
||||
static char *mnt_roots;
|
||||
|
||||
/*
|
||||
* Helper for getting a path to where the namespace's root
|
||||
* is re-constructed.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue