[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