[CRIU] [PATCH 04/15] restore: split read_and_open_vmas into parts read_vmas and open_vmas
Andrey Vagin
avagin at openvz.org
Fri Nov 2 09:31:56 EDT 2012
read_vmas will be called bedore forking children to restore
copy-on-write memory.
Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
cr-restore.c | 25 ++++++++++++++++++++++---
1 file changed, 22 insertions(+), 3 deletions(-)
diff --git a/cr-restore.c b/cr-restore.c
index 435c590..9cf0dc9 100644
--- a/cr-restore.c
+++ b/cr-restore.c
@@ -176,7 +176,7 @@ err:
return ret;
}
-static int read_and_open_vmas(int pid, struct list_head *vmas, int *nr_vmas)
+static int read_vmas(int pid, struct list_head *vmas, int *nr_vmas)
{
int fd, ret = -1;
@@ -209,7 +209,22 @@ static int read_and_open_vmas(int pid, struct list_head *vmas, int *nr_vmas)
vma->vma = *e;
vma_entry__free_unpacked(e, NULL);
+ }
+
+ close(fd);
+ return ret;
+}
+
+static int open_vmas(int pid, struct list_head *vmas)
+{
+ struct vma_area *vma;
+ int fd, ret = -1;
+ fd = open_image_ro(CR_FD_VMAS, pid);
+ if (fd < 0)
+ return fd;
+
+ list_for_each_entry(vma, vmas, list) {
if (!(vma_entry_is(&vma->vma, VMA_AREA_REGULAR)))
continue;
@@ -235,7 +250,7 @@ static int read_and_open_vmas(int pid, struct list_head *vmas, int *nr_vmas)
}
close(fd);
- return ret;
+ return ret < 0 ? -1 : 0;
}
static int prepare_and_sigreturn(int pid, CoreEntry *core)
@@ -243,7 +258,11 @@ static int prepare_and_sigreturn(int pid, CoreEntry *core)
int err, nr_vmas;
LIST_HEAD(vma_list);
- err = read_and_open_vmas(pid, &vma_list, &nr_vmas);
+ err = read_vmas(pid, &vma_list, &nr_vmas);
+ if (err)
+ return err;
+
+ err = open_vmas(pid, &vma_list);
if (err)
return err;
--
1.7.11.7
More information about the CRIU
mailing list