[CRIU] [PATCH 3/5] page-server: Merge async and sync read API calls

Mike Rapoport mike.rapoport at gmail.com
Wed Jun 14 14:55:23 MSK 2017


On Wed, Jun 14, 2017 at 01:15:06PM +0300, Pavel Emelyanov wrote:
> Now these two look exactly the same and we can have
> only one call with additional sync/async (flags) arg.
> 
> Signed-off-by: Pavel Emelyanov <xemul at virtuozzo.com>

Acked-by: Mike Rapoport <rppt at linux.vnet.ibm.com>

> ---
>  criu/include/page-xfer.h |  6 ++----
>  criu/page-xfer.c         | 13 +++++++++++--
>  criu/pagemap.c           | 10 ++++------
>  3 files changed, 17 insertions(+), 12 deletions(-)
> 
> diff --git a/criu/include/page-xfer.h b/criu/include/page-xfer.h
> index 4ccefee..1a00d9c 100644
> --- a/criu/include/page-xfer.h
> +++ b/criu/include/page-xfer.h
> @@ -62,9 +62,7 @@ extern int check_parent_page_xfer(int fd_type, long id);
>  extern int request_remote_pages(int pid, unsigned long addr, int nr_pages);
>  
>  typedef int (*ps_async_read_complete)(int pid, unsigned long vaddr, int nr_pages, void *);
> -extern int page_server_start_async_read(void *buf, int nr_pages,
> -		ps_async_read_complete complete, void *priv);
> -extern int page_server_start_sync_read(void *buf, int nr_pages,
> -		ps_async_read_complete complete, void *priv);
> +extern int page_server_start_read(void *buf, int nr_pages,
> +		ps_async_read_complete complete, void *priv, unsigned flags);
>  
>  #endif /* __CR_PAGE_XFER__H__ */
> diff --git a/criu/page-xfer.c b/criu/page-xfer.c
> index 067b7d3..dd1c6d0 100644
> --- a/criu/page-xfer.c
> +++ b/criu/page-xfer.c
> @@ -1072,7 +1072,7 @@ struct ps_async_read {
>  
>  static LIST_HEAD(async_reads);
>  
> -int page_server_start_async_read(void *buf, int nr_pages,
> +static int page_server_start_async_read(void *buf, int nr_pages,
>  		ps_async_read_complete complete, void *priv)
>  {
>  	struct ps_async_read *ar;
> @@ -1204,7 +1204,7 @@ static int receive_remote_pages(int len, void *buf)
>  	return 0;
>  }
>  
> -int page_server_start_sync_read(void *buf, int nr,
> +static int page_server_start_sync_read(void *buf, int nr,
>  		ps_async_read_complete complete, void *priv)
>  {
>  	int ret, pid, new_nr;
> @@ -1226,3 +1226,12 @@ int page_server_start_sync_read(void *buf, int nr,
>  
>  	return ret;
>  }
> +
> +int page_server_start_read(void *buf, int nr,
> +		ps_async_read_complete complete, void *priv, unsigned flags)
> +{
> +	if (flags & PR_ASYNC)
> +		return page_server_start_async_read(buf, nr, complete, priv);
> +	else
> +		return page_server_start_sync_read(buf, nr, complete, priv);
> +}
> diff --git a/criu/pagemap.c b/criu/pagemap.c
> index 8a2cce9..2a65c59 100644
> --- a/criu/pagemap.c
> +++ b/criu/pagemap.c
> @@ -470,12 +470,10 @@ static int maybe_read_page_remote(struct page_read *pr, unsigned long vaddr,
>  
>  	/* We always do PR_ASAP mode here (FIXME?) */
>  	ret = request_remote_pages(pr->pid, vaddr, nr);
> -	if (ret < 0)
> -		return ret;
> -	if (flags & PR_ASYNC)
> -		return page_server_start_async_read(buf, nr, read_page_complete, pr);
> -	else
> -		return page_server_start_sync_read(buf, nr, read_page_complete, pr);
> +	if (!ret)
> +		ret = page_server_start_read(buf, nr,
> +				read_page_complete, pr, flags);
> +	return ret;
>  }
>  
>  static int read_pagemap_page(struct page_read *pr, unsigned long vaddr, int nr,
> -- 
> 2.1.4
> 
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu


More information about the CRIU mailing list