[CRIU] [PATCH v5 05/11] files: Add fd_open_state::finalize method()
Kirill Tkhai
ktkhai at virtuozzo.com
Tue Jul 12 00:22:35 PDT 2016
On 04.07.2016 20:28, Pavel Emelyanov wrote:
> On 06/28/2016 03:59 PM, Kirill Tkhai wrote:
>> On 28.06.2016 15:28, Pavel Emelyanov wrote:
>>> 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?
>>
>> Promiscous queues are restored in post-open stage.
>> All ghost fle must be alive at this moment.
>
> OK, so we call post_open callbacks and close these guys right after it. No?
Sure.
>>>> + 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