[CRIU] [PATCH v2] restorer: move vma flags ANON bit drop alter IPC
check
Kinsbursky Stanislav
skinsbursky at openvz.org
Fri Feb 17 05:43:15 EST 2012
v2: local flags variable introduced
This doesn't change anything. But looks clearer, because this check has
nothing with SYSV IPC mappings.
Signed-off-by: Stanislav Kinsbursky <skinsbursky at openvz.org>
---
restorer.c | 30 ++++++++++++++++--------------
1 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/restorer.c b/restorer.c
index 3eb5e35..e0eccb4 100644
--- a/restorer.c
+++ b/restorer.c
@@ -289,16 +289,29 @@ err:
static u64 restore_mapping(const struct vma_entry *vma_entry)
{
- int prot;
+ int prot, flags;
if (vma_entry_is(vma_entry, VMA_AREA_SYSVIPC))
return sys_shmat(vma_entry->fd, (void *)vma_entry->start,
(vma_entry->prot & PROT_WRITE) ? 0 : SHM_RDONLY);
+ flags = vma_entry->flags;
+
+ /*
+ * Restore or shared mappings are tricky, since
+ * we open anonymous mapping via map_files/
+ * MAP_ANONYMOUS should be eliminated so fd would
+ * be taken into account by a kernel.
+ */
+ if (vma_entry_is(vma_entry, VMA_ANON_SHARED)) {
+ if (vma_entry->fd != -1UL)
+ flags &= ~MAP_ANONYMOUS;
+ }
+
prot = vma_entry->prot;
/* A mapping of file with MAP_SHARED is up to date */
- if (vma_entry->fd == -1 || !(vma_entry->flags & MAP_SHARED))
+ if (vma_entry->fd == -1 || !(flags & MAP_SHARED))
prot |= PROT_WRITE;
/*
@@ -309,7 +322,7 @@ static u64 restore_mapping(const struct vma_entry *vma_entry)
return sys_mmap((void *)vma_entry->start,
vma_entry_len(vma_entry),
prot,
- vma_entry->flags | MAP_FIXED,
+ flags | MAP_FIXED,
vma_entry->fd,
vma_entry->pgoff);
}
@@ -401,17 +414,6 @@ long restore_task(struct task_restore_core_args *args)
if (!vma_entry_is(vma_entry, VMA_AREA_REGULAR))
continue;
- /*
- * Restore or shared mappings are tricky, since
- * we open anonymous mapping via map_files/
- * MAP_ANONYMOUS should be eliminated so fd would
- * be taken into account by a kernel.
- */
- if (vma_entry_is(vma_entry, VMA_ANON_SHARED)) {
- if (vma_entry->fd != -1UL)
- vma_entry->flags &= ~MAP_ANONYMOUS;
- }
-
va = restore_mapping(vma_entry);
if (va != vma_entry->start) {
More information about the CRIU
mailing list