mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-30 05:48:05 +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
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…
x
Reference in New Issue
Block a user