Commit 6349ffe0 authored by Pavel Emelyanov's avatar Pavel Emelyanov

fd: Don't use data from parasite_ctl

The structure will become private to compel, so only
keep one as an opaque pointer for parasite API.s

In particular, use item.pid instead of ctl.pid.
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
parent d5092dd3
...@@ -304,12 +304,12 @@ int fill_fdlink(int lfd, const struct fd_parms *p, struct fd_link *link) ...@@ -304,12 +304,12 @@ int fill_fdlink(int lfd, const struct fd_parms *p, struct fd_link *link)
return 0; return 0;
} }
static int fill_fd_params(struct parasite_ctl *ctl, int fd, int lfd, static int fill_fd_params(struct pid *owner_pid, int fd, int lfd,
struct fd_opts *opts, struct fd_parms *p) struct fd_opts *opts, struct fd_parms *p)
{ {
int ret; int ret;
struct statfs fsbuf; struct statfs fsbuf;
struct fdinfo_common fdinfo = { .mnt_id = -1, .owner = ctl->pid.virt }; struct fdinfo_common fdinfo = { .mnt_id = -1, .owner = owner_pid->virt };
if (fstat(lfd, &p->stat) < 0) { if (fstat(lfd, &p->stat) < 0) {
pr_perror("Can't stat fd %d", lfd); pr_perror("Can't stat fd %d", lfd);
...@@ -321,22 +321,21 @@ static int fill_fd_params(struct parasite_ctl *ctl, int fd, int lfd, ...@@ -321,22 +321,21 @@ static int fill_fd_params(struct parasite_ctl *ctl, int fd, int lfd,
return -1; return -1;
} }
if (parse_fdinfo_pid(ctl->pid.real, fd, FD_TYPES__UND, NULL, &fdinfo)) if (parse_fdinfo_pid(owner_pid->real, fd, FD_TYPES__UND, NULL, &fdinfo))
return -1; return -1;
p->fs_type = fsbuf.f_type; p->fs_type = fsbuf.f_type;
p->fd_ctl = ctl;
p->fd = fd; p->fd = fd;
p->pos = fdinfo.pos; p->pos = fdinfo.pos;
p->flags = fdinfo.flags; p->flags = fdinfo.flags;
p->mnt_id = fdinfo.mnt_id; p->mnt_id = fdinfo.mnt_id;
p->pid = ctl->pid.real; p->pid = owner_pid->real;
p->fd_flags = opts->flags; p->fd_flags = opts->flags;
fown_entry__init(&p->fown); fown_entry__init(&p->fown);
pr_info("%d fdinfo %d: pos: %#16"PRIx64" flags: %16o/%#x\n", pr_info("%d fdinfo %d: pos: %#16"PRIx64" flags: %16o/%#x\n",
ctl->pid.real, fd, p->pos, p->flags, (int)p->fd_flags); owner_pid->real, fd, p->pos, p->flags, (int)p->fd_flags);
ret = fcntl(lfd, F_GETSIG, 0); ret = fcntl(lfd, F_GETSIG, 0);
if (ret < 0) { if (ret < 0) {
...@@ -426,21 +425,23 @@ static int dump_chrdev(struct fd_parms *p, int lfd, struct cr_img *img) ...@@ -426,21 +425,23 @@ static int dump_chrdev(struct fd_parms *p, int lfd, struct cr_img *img)
return do_dump_gen_file(p, lfd, ops, img); return do_dump_gen_file(p, lfd, ops, img);
} }
static int dump_one_file(struct parasite_ctl *ctl, int fd, int lfd, struct fd_opts *opts, static int dump_one_file(struct pid *pid, int fd, int lfd, struct fd_opts *opts,
struct cr_img *img) struct cr_img *img, struct parasite_ctl *ctl)
{ {
struct fd_parms p = FD_PARMS_INIT; struct fd_parms p = FD_PARMS_INIT;
const struct fdtype_ops *ops; const struct fdtype_ops *ops;
struct fd_link link; struct fd_link link;
if (fill_fd_params(ctl, fd, lfd, opts, &p) < 0) { if (fill_fd_params(pid, fd, lfd, opts, &p) < 0) {
pr_err("Can't get stat on %d\n", fd); pr_err("Can't get stat on %d\n", fd);
return -1; return -1;
} }
if (note_file_lock(&ctl->pid, fd, lfd, &p)) if (note_file_lock(pid, fd, lfd, &p))
return -1; return -1;
p.fd_ctl = ctl; /* Some dump_opts require this to talk to parasite */
if (S_ISSOCK(p.stat.st_mode)) if (S_ISSOCK(p.stat.st_mode))
return dump_socket(&p, lfd, img); return dump_socket(&p, lfd, img);
...@@ -515,7 +516,7 @@ int dump_task_files_seized(struct parasite_ctl *ctl, struct pstree_item *item, ...@@ -515,7 +516,7 @@ int dump_task_files_seized(struct parasite_ctl *ctl, struct pstree_item *item,
int off, nr_fds = min((int) PARASITE_MAX_FDS, dfds->nr_fds); int off, nr_fds = min((int) PARASITE_MAX_FDS, dfds->nr_fds);
pr_info("\n"); pr_info("\n");
pr_info("Dumping opened files (pid: %d)\n", ctl->pid.real); pr_info("Dumping opened files (pid: %d)\n", item->pid.real);
pr_info("----------------------------------------\n"); pr_info("----------------------------------------\n");
lfds = xmalloc(nr_fds * sizeof(int)); lfds = xmalloc(nr_fds * sizeof(int));
...@@ -541,8 +542,8 @@ int dump_task_files_seized(struct parasite_ctl *ctl, struct pstree_item *item, ...@@ -541,8 +542,8 @@ int dump_task_files_seized(struct parasite_ctl *ctl, struct pstree_item *item,
goto err; goto err;
for (i = 0; i < nr_fds; i++) { for (i = 0; i < nr_fds; i++) {
ret = dump_one_file(ctl, dfds->fds[i + off], ret = dump_one_file(&item->pid, dfds->fds[i + off],
lfds[i], opts + i, img); lfds[i], opts + i, img, ctl);
close(lfds[i]); close(lfds[i]);
if (ret) if (ret)
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment