[CRIU] [PATCH 2/2] mm: handle new processes which created between snapshots
Pavel Emelyanov
xemul at parallels.com
Wed Jun 26 02:35:27 EDT 2013
On 06/24/2013 07:59 PM, Andrey Vagin wrote:
> These processes don't have image files in a parent snapshot and crtools
> should not fail in this case.
>
> https://bugzilla.openvz.org/show_bug.cgi?id=2636
>
> Signed-off-by: Andrey Vagin <avagin at openvz.org>
> ---
> mem.c | 10 +++++++---
> page-read.c | 2 +-
> 2 files changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/mem.c b/mem.c
> index d6c807c..3316c4e 100644
> --- a/mem.c
> +++ b/mem.c
> @@ -86,7 +86,7 @@ static struct mem_snap_ctx *mem_snap_init(struct parasite_ctl *ctl)
>
> pm_fd = open_image_at(p_fd, CR_FD_PAGEMAP, O_RSTR, ctl->pid.virt);
> if (pm_fd < 0)
> - return ERR_PTR(pm_fd);
> + return ERR_PTR(-errno);
Check for ENOENT here and return NULL if so.
>
> ctx = xmalloc(sizeof(*ctx));
> if (!ctx)
> @@ -325,8 +325,12 @@ static int __parasite_dump_pages_seized(struct parasite_ctl *ctl,
> */
>
> snap = mem_snap_init(ctl);
> - if (IS_ERR(snap))
> - goto out;
> + if (IS_ERR(snap)) {
> + if (PTR_ERR(snap) == -ENOENT)
> + snap = NULL;
> + else
> + goto out;
> + }
>
> map = xmalloc(vma_area_list->longest * sizeof(*map));
> if (!map)
> diff --git a/page-read.c b/page-read.c
> index 7de69d2..0f9a9cc 100644
> --- a/page-read.c
> +++ b/page-read.c
> @@ -162,7 +162,7 @@ static int try_open_parent(int dfd, int pid, struct page_read *pr)
> if (!parent)
> goto err_cl;
>
> - if (open_page_read_at(pfd, pid, parent))
> + if (open_page_read_at(pfd, pid, parent) && errno != ENOENT)
> goto err_free;
>
> close(pfd);
>
More information about the CRIU
mailing list