[CRIU] [PATCH v5 05/11] files: Add fd_open_state::finalize method()
Pavel Emelyanov
xemul at virtuozzo.com
Tue Jun 28 05:28:21 PDT 2016
On 06/16/2016 04:53 PM, Kirill Tkhai wrote:
> Add a method, which allows to close temporary files,
> used on restore stage. This will be used in next patches.
>
> v5: New
>
> Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
> ---
> criu/files.c | 9 +++++++++
> criu/include/files.h | 3 +++
> 2 files changed, 12 insertions(+)
>
> diff --git a/criu/files.c b/criu/files.c
> index b9fdbdc..036e054 100644
> --- a/criu/files.c
> +++ b/criu/files.c
> @@ -676,6 +676,7 @@ static int collect_fd(int pid, FdinfoEntry *e, struct rst_info *rst_info)
> futex_init(&new_le->real_pid);
> new_le->pid = pid;
> new_le->fe = e;
> + new_le->flags = 0;
>
> fdesc = find_file_desc(e);
> if (fdesc == NULL) {
> @@ -854,12 +855,14 @@ static int open_transport_fd(int pid, struct fdinfo_list_entry *fle);
> static int open_fd(int pid, struct fdinfo_list_entry *fle);
> static int receive_fd(int pid, struct fdinfo_list_entry *fle);
> static int post_open_fd(int pid, struct fdinfo_list_entry *fle);
> +static int finalize_fd(int pid, struct fdinfo_list_entry *fle);
>
> static struct fd_open_state states[] = {
> { "prepare", open_transport_fd, true,},
> { "create", open_fd, true,},
> { "receive", receive_fd, false,},
> { "post_create", post_open_fd, false,},
> + { "finalize", finalize_fd, true,},
> };
>
> #define want_recv_stage() do { states[2].required = true; } while (0)
> @@ -993,6 +996,12 @@ static int post_open_fd(int pid, struct fdinfo_list_entry *fle)
> return d->ops->post_open(d, fle->fe->fd);
> }
>
> +static int finalize_fd(int pid, struct fdinfo_list_entry *fle)
> +{
> + if (fle->flags & FD_LE_GHOST)
> + close(fle->fe->fd);
Hm... Why can't we just do this in post_open_fd-s?
> + return 0;
> +}
>
> static int serve_out_fd(int pid, int fd, struct file_desc *d)
> {
> diff --git a/criu/include/files.h b/criu/include/files.h
> index 5e3d6dc..06a1f98 100644
> --- a/criu/include/files.h
> +++ b/criu/include/files.h
> @@ -62,6 +62,7 @@ extern int fill_fdlink(int lfd, const struct fd_parms *p, struct fd_link *link);
>
> struct file_desc;
>
> +
> struct fdinfo_list_entry {
> struct list_head desc_list; /* To chain on @fd_info_head */
> struct file_desc *desc; /* Associated file descriptor */
> @@ -70,6 +71,8 @@ struct fdinfo_list_entry {
> int pid;
> futex_t real_pid;
> FdinfoEntry *fe;
> +#define FD_LE_GHOST 0x1
> + unsigned flags;
> };
>
> /* reports whether fd_a takes prio over fd_b */
>
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
> .
>
More information about the CRIU
mailing list