[CRIU] [PATCH] lazy-pages: fix lazy dump

Mike Rapoport rppt at linux.vnet.ibm.com
Mon Jan 16 03:42:44 PST 2017


Ping?

On Wed, Jan 11, 2017 at 10:37:32AM +0200, Mike Rapoport wrote:
> The introduction of page-server send mode have broken the lazy dump because
> instead of using existing pstree, the page server now tries to recreate the
> pstree from the images.
> Adding lazy_dump parameter to cr_page_server resolves this issue.
> 
> Signed-off-by: Mike Rapoport <rppt at linux.vnet.ibm.com>
> ---
>  criu/cr-dump.c           | 2 +-
>  criu/cr-service.c        | 2 +-
>  criu/crtools.c           | 2 +-
>  criu/include/page-xfer.h | 2 +-
>  criu/page-xfer.c         | 7 +++----
>  5 files changed, 7 insertions(+), 8 deletions(-)
> 
> diff --git a/criu/cr-dump.c b/criu/cr-dump.c
> index b6a9c9b..555814b 100644
> --- a/criu/cr-dump.c
> +++ b/criu/cr-dump.c
> @@ -1576,7 +1576,7 @@ static int cr_lazy_mem_dump(void)
>  	int ret = 0;
> 
>  	pr_info("Starting lazy pages server\n");
> -	ret = cr_page_server(false, -1);
> +	ret = cr_page_server(false, true, -1);
> 
>  	for_each_pstree_item(item) {
>  		destroy_page_pipe(dmpi(item)->mem_pp);
> diff --git a/criu/cr-service.c b/criu/cr-service.c
> index 00a2d07..fbd1065 100644
> --- a/criu/cr-service.c
> +++ b/criu/cr-service.c
> @@ -704,7 +704,7 @@ static int start_page_server_req(int sk, CriuOpts *req)
> 
>  		pr_debug("Starting page server\n");
> 
> -		pid = cr_page_server(true, start_pipe[1]);
> +		pid = cr_page_server(true, false, start_pipe[1]);
>  		if (pid <= 0)
>  			goto out_ch;
> 
> diff --git a/criu/crtools.c b/criu/crtools.c
> index 06b2fa7..b19d368 100644
> --- a/criu/crtools.c
> +++ b/criu/crtools.c
> @@ -772,7 +772,7 @@ int main(int argc, char *argv[], char *envp[])
>  #endif
> 
>  	if (!strcmp(argv[optind], "page-server"))
> -		return cr_page_server(opts.daemon_mode, -1) > 0 ? 0 : 1;
> +		return cr_page_server(opts.daemon_mode, false, -1) > 0 ? 0 : 1;
> 
>  	if (!strcmp(argv[optind], "service"))
>  		return cr_service(opts.daemon_mode);
> diff --git a/criu/include/page-xfer.h b/criu/include/page-xfer.h
> index dfe43e5..1f59bdb 100644
> --- a/criu/include/page-xfer.h
> +++ b/criu/include/page-xfer.h
> @@ -2,7 +2,7 @@
>  #define __CR_PAGE_XFER__H__
>  #include "pagemap.h"
> 
> -extern int cr_page_server(bool daemon_mode, int cfd);
> +extern int cr_page_server(bool daemon_mode, bool lazy_dump, int cfd);
> 
>  /*
>   * page_xfer -- transfer pages into image file.
> diff --git a/criu/page-xfer.c b/criu/page-xfer.c
> index 770cb97..c7ea433 100644
> --- a/criu/page-xfer.c
> +++ b/criu/page-xfer.c
> @@ -906,18 +906,17 @@ static int page_server_init_send(void)
>  	return 0;
>  }
> 
> -int cr_page_server(bool daemon_mode, int cfd)
> +int cr_page_server(bool daemon_mode, bool lazy_dump, int cfd)
>  {
>  	int ask = -1;
>  	int sk = -1;
>  	int ret;
> 
> -	if (!opts.lazy_pages) {
> +	if (!opts.lazy_pages)
>  		up_page_ids_base();
> -	} else {
> +	else if (!lazy_dump)
>  		if (page_server_init_send())
>  			return -1;
> -	}
> 
>  	if (opts.ps_socket != -1) {
>  		ret = 0;
> -- 
> 1.9.1
> 



More information about the CRIU mailing list