[CRIU] Re: [PATCH v3 8/8] dump: move fd dump itself to separated function

Pavel Emelyanov xemul at parallels.com
Mon Mar 5 13:22:25 EST 2012


On 03/05/2012 10:01 PM, Kinsbursky Stanislav wrote:
> Fd entry itself will be dumped for sockets soon.

Let's postpone this till you write the real code for dumping
sockets as FD-s. Since I heavily doubt that the char *path argument
will be relevant for sockets :\

> Signed-off-by: Stanislav Kinsbursky <skinsbursky at openvz.org>
> 
> ---
>  cr-dump.c |   62 ++++++++++++++++++++++++++++++++-----------------------------
>  1 files changed, 33 insertions(+), 29 deletions(-)
> 
> diff --git a/cr-dump.c b/cr-dump.c
> index cd7d22f..0e9f2f8 100644
> --- a/cr-dump.c
> +++ b/cr-dump.c
> @@ -88,31 +88,14 @@ err:
>  	return ret;
>  }
>  
> -static int dump_one_reg_file(struct fd_parms *p,
> -			     struct cr_fdset *cr_fdset,
> -			     bool do_close_lfd)
> +static int dump_one_fd_entry(const struct fd_parms *p,
> +			     char *path,
> +			     struct cr_fdset *cr_fdset)
>  {
>  	struct fdinfo_entry e;
> -	char fd_str[128];
> -	int len;
> -	int ret = -1;
> -
> -	snprintf(fd_str, sizeof(fd_str), "/proc/self/fd/%d", p->lfd);
> -	len = readlink(fd_str, big_buffer, sizeof(big_buffer) - 1);
> -	if (len < 0) {
> -		pr_perror("Can't readlink %s", fd_str);
> -		goto err;
> -	}
> -
> -	big_buffer[len] = '\0';
> -	pr_info("Dumping path for %lx fd via self %d [%s]\n",
> -		p->fd_name, p->lfd, big_buffer);
> -
> -	if (do_close_lfd)
> -		close(p->lfd);
>  
>  	e.type	= p->type;
> -	e.len	= len;
> +	e.len	= strlen(path);
>  	e.flags = p->flags;
>  	e.pos	= p->pos;
>  	e.addr	= p->fd_name;
> @@ -129,23 +112,44 @@ static int dump_one_reg_file(struct fd_parms *p,
>  
>  		entry = fd_id_entry_collect((u32)p->id, p->pid, p->fd_name);
>  		if (!entry)
> -			goto err;
> +			return -1;
>  
>  		/* Now it might have completely new ID here */
>  		e.id	= entry->u.id;
>  	}
>  
>  	pr_info("fdinfo: type: %2x len: %2x flags: %4x pos: %8lx addr: %16lx\n",
> -		p->type, len, p->flags, p->pos, p->fd_name);
> +		p->type, e.len, p->flags, p->pos, p->fd_name);
>  
>  	if (write_img(cr_fdset->fds[CR_FD_FDINFO], &e))
> -		goto err;
> -	if (write_img_buf(cr_fdset->fds[CR_FD_FDINFO], big_buffer, e.len))
> -		goto err;
> +		return -1;
> +	if (write_img_buf(cr_fdset->fds[CR_FD_FDINFO], path, e.len))
> +		return -1;
> +	return 0;
> +}
>  
> -	ret = 0;
> -err:
> -	return ret;
> +static int dump_one_reg_file(struct fd_parms *p,
> +			     struct cr_fdset *cr_fdset,
> +			     bool do_close_lfd)
> +{
> +	char fd_str[128];
> +	int len;
> +
> +	snprintf(fd_str, sizeof(fd_str), "/proc/self/fd/%d", p->lfd);
> +	len = readlink(fd_str, big_buffer, sizeof(big_buffer) - 1);
> +	if (len < 0) {
> +		pr_perror("Can't readlink %s", fd_str);
> +		return -1;
> +	}
> +
> +	big_buffer[len] = '\0';
> +	pr_info("Dumping path for %lx fd via self %d [%s]\n",
> +		p->fd_name, p->lfd, big_buffer);
> +
> +	if (do_close_lfd)
> +		close(p->lfd);
> +
> +	return dump_one_fd_entry(p, big_buffer, cr_fdset);
>  }
>  
>  static int dump_task_special_files(pid_t pid, struct cr_fdset *cr_fdset)
> 



More information about the CRIU mailing list