[CRIU] [PATCH v3 04/11] gc: implement link remaps show

Pavel Emelyanov xemul at virtuozzo.com
Tue Aug 23 05:10:19 PDT 2016


On 08/10/2016 10:12 PM, Eugene Batalov wrote:
> Signed-off-by: Eugene Batalov <eabatalov89 at gmail.com>
> ---
>  criu/cr-gc.c             | 13 +++++++++++--
>  criu/files-reg.c         | 27 +++++++++++++++++++++++++++
>  criu/include/files-reg.h |  1 +
>  3 files changed, 39 insertions(+), 2 deletions(-)
> 
> diff --git a/criu/cr-gc.c b/criu/cr-gc.c
> index d6b4ad1..2879365 100644
> --- a/criu/cr-gc.c
> +++ b/criu/cr-gc.c
> @@ -68,6 +68,13 @@ static int gc_cleanup_mntns(void)
>  	return ret;
>  }
>  
> +static int gc_show(void)
> +{
> +	show_link_remaps();
> +
> +	return 0;
> +}
> +
>  static int gc_do(void)
>  {
>  	if (gc_link_remaps() < 0)
> @@ -115,8 +122,10 @@ int cr_gc(void)
>  		goto exit;
>  	}
>  
> -	if (gc_do())
> -		ret = -1;
> +	if (opts.show)
> +		ret = gc_show();
> +	else
> +		ret = gc_do();

Hm... I'd expect this to look the other way -- each gc_do() routine
right before __doing__ the cleanup checks for opts.show and just
prints what it plans to do. Not the completely separate stack of calls.

>  
>  exit:
>  	if (gc_cleanup_mntns())
> diff --git a/criu/files-reg.c b/criu/files-reg.c
> index efb7045..7dd7732 100644
> --- a/criu/files-reg.c
> +++ b/criu/files-reg.c
> @@ -749,6 +749,33 @@ int gc_link_remaps(void)
>  	return 0;
>  }
>  
> +void show_link_remaps(void)
> +{
> +	struct remap_info *ri;
> +
> +	if (list_empty(&remaps))
> +		return;
> +
> +	list_for_each_entry(ri, &remaps, list) {
> +		if (ri->rfe->remap_type != REMAP_TYPE__LINKED)
> +			continue;
> +
> +		/* Don't print " (deleted)" suffix if it exists */
> +		const char DELETED_SUFFIX[] = " (deleted)";
> +		size_t path_size = strlen(ri->rfi->path) + 1;
> +
> +		if (path_size >= sizeof(DELETED_SUFFIX)) {
> +			char *path_no_suffix = ri->rfi->path + path_size
> +				- sizeof(DELETED_SUFFIX);
> +			if (!strcmp(path_no_suffix, DELETED_SUFFIX))
> +				path_size -= sizeof(DELETED_SUFFIX) - 1;
> +		}
> +
> +		pr_msg("Link remap: /%s -> /%.*s\n",
> +					ri->rfi->remap->rpath, (int)path_size - 1, ri->rfi->path);
> +	}
> +}
> +
>  static int create_link_remap(char *path, int len, int lfd,
>  				u32 *idp, struct ns_id *nsid)
>  {
> diff --git a/criu/include/files-reg.h b/criu/include/files-reg.h
> index ff54303..f567127 100644
> --- a/criu/include/files-reg.h
> +++ b/criu/include/files-reg.h
> @@ -53,6 +53,7 @@ extern void free_link_remaps(void);
>  extern int prepare_remaps(void);
>  extern void try_clean_remaps(void);
>  extern int gc_link_remaps(void);
> +extern void show_link_remaps(void);
>  
>  extern int strip_deleted(struct fd_link *link);
>  
> 



More information about the CRIU mailing list