[CRIU] [RFC PATCH 08/16] criu: lazy_pages: drop find_vmas
Pavel Emelyanov
xemul at virtuozzo.com
Wed Oct 5 06:10:37 PDT 2016
Some comment would be nice :)
On 09/27/2016 04:42 PM, Mike Rapoport wrote:
> Signed-off-by: Mike Rapoport <rppt at linux.vnet.ibm.com>
> ---
> criu/uffd.c | 85 ++++++++-----------------------------------------------------
> 1 file changed, 10 insertions(+), 75 deletions(-)
>
> diff --git a/criu/uffd.c b/criu/uffd.c
> index 9a44807..c0c1349 100644
> --- a/criu/uffd.c
> +++ b/criu/uffd.c
> @@ -323,8 +323,6 @@ out:
> return -1;
> }
>
> -static int find_vmas(struct lazy_pages_info *lpi);
> -
> static int update_lazy_iovecs(struct lazy_pages_info *lpi, unsigned long addr,
> int len)
> {
> @@ -441,13 +439,22 @@ static struct lazy_pages_info *ud_open(int client)
> uffd_flags = fcntl(lpi->uffd, F_GETFD, NULL);
> pr_debug("uffd_flags are 0x%x\n", uffd_flags);
>
> + ret = open_page_read(lpi->pid, &lpi->pr, PR_TASK);
> + if (ret <= 0) {
> + ret = -1;
> + goto out;
> + }
> +
> /*
> * Find the memory pages belonging to the restored process
> * so that it is trackable when all pages have been transferred.
> */
> - if ((lpi->total_pages = find_vmas(lpi)) == -1)
> + lpi->total_pages = collect_lazy_iovecs(lpi);
> + if (lpi->total_pages < 0)
> goto out;
>
> + pr_debug("Found %ld pages to be handled by UFFD\n", lpi->total_pages);
> +
> hlist_add_head(&lpi->hash, &lpi_hash[lpi->uffd % LPI_HASH_SIZE]);
>
> ret = collect_lazy_iovecs(lpi);
> @@ -614,78 +621,6 @@ static int handle_regular_pages(struct lazy_pages_info *lpi, void *dest,
> return 0;
> }
>
> -/*
> - * Setting up criu infrastructure and scan for VMAs.
> - */
> -static int find_vmas(struct lazy_pages_info *lpi)
> -{
> - struct cr_img *img;
> - int ret;
> - struct vm_area_list vmas;
> - int vn = 0;
> - struct rst_info *ri;
> - struct pstree_item *item = pstree_item_by_virt(lpi->pid);
> -
> - BUG_ON(!item);
> -
> - vm_area_list_init(&vmas);
> -
> - ri = rsti(item);
> - if (!ri)
> - return -1;
> -
> - img = open_image(CR_FD_MM, O_RSTR, lpi->pid);
> - if (!img)
> - return -1;
> -
> - ret = pb_read_one_eof(img, &ri->mm, PB_MM);
> - close_image(img);
> - if (ret == -1)
> - return -1;
> -
> - pr_debug("Found %zd VMAs in image\n", ri->mm->n_vmas);
> -
> - while (vn < ri->mm->n_vmas) {
> - struct vma_area *vma;
> -
> - ret = -1;
> - vma = alloc_vma_area();
> - if (!vma)
> - goto out;
> -
> - ret = 0;
> - ri->vmas.nr++;
> - vma->e = ri->mm->vmas[vn++];
> -
> - list_add_tail(&vma->list, &ri->vmas.h);
> -
> - if (vma_area_is_private(vma, kdat.task_size)) {
> - vmas.priv_size += vma_area_len(vma);
> - if (vma->e->flags & MAP_GROWSDOWN)
> - vmas.priv_size += PAGE_SIZE;
> - }
> -
> - pr_info("vma 0x%"PRIx64" 0x%"PRIx64"\n", vma->e->start, vma->e->end);
> - }
> -
> - ret = open_page_read(lpi->pid, &lpi->pr, PR_TASK);
> - if (ret <= 0) {
> - ret = -1;
> - goto out;
> - }
> -
> - ret = collect_lazy_iovecs(lpi);
> - if (ret < 0) {
> - pr_err("collect_lazy_iovecs=%d\n", ret);
> - goto out;
> - }
> -
> - pr_debug("Found %d pages to be handled by UFFD\n", ret);
> -
> -out:
> - return ret;
> -}
> -
> static int handle_user_fault(struct lazy_pages_info *lpi, void *dest)
> {
> struct uffd_msg msg;
>
More information about the CRIU
mailing list