[CRIU] [PATCH RFC 24/30] timerfd: Kill post_open stage
Kirill Tkhai
ktkhai at virtuozzo.com
Tue Nov 29 03:09:47 PST 2016
On 08.11.2016 16:09, Pavel Emelyanov wrote:
> On 11/01/2016 05:34 PM, Kirill Tkhai wrote:
>> Timerfd's post_open state does not depend on another objects,
>> so it may be safely merged into open stage.
>>
>> Looks like it was made historical reasons.
>
> No it wasn't. It was introduced since in ->open we don't have
> timerfd at the proper place, but in post_open we do and can
> save the fd value into rst_taimerfd array to make restorer
> code operate on it.
Ok. Now is possible to use file_master(d)->fe->fd for that.
Also, it may be useful to make file_desc_ops->open work
with struct fdinfo_list_entry arguments.
>> Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
>> ---
>> criu/timerfd.c | 20 +++-----------------
>> 1 file changed, 3 insertions(+), 17 deletions(-)
>>
>> diff --git a/criu/timerfd.c b/criu/timerfd.c
>> index 0b97ced..a18588c 100644
>> --- a/criu/timerfd.c
>> +++ b/criu/timerfd.c
>> @@ -91,22 +91,6 @@ const struct fdtype_ops timerfd_dump_ops = {
>> .dump = dump_one_timerfd,
>> };
>>
>> -/*
>> - * We need to restore timers at the very late stage in restorer
>> - * to eliminate the case when timer is expired but we have not
>> - * yet finished restore procedure and signal handlers are not
>> - * set up properly. We need to copy timers settings into restorer
>> - * area that's why post-open is used for.
>> - */
>> -static int timerfd_post_open(struct file_desc *d, int fd)
>> -{
>> - struct timerfd_info *info = container_of(d, struct timerfd_info, d);
>> -
>> - info->t_fd = fd;
>> - list_add_tail(&info->rlist, &rst_timerfds);
>> - return 0;
>> -}
>> -
>> int prepare_timerfds(struct task_restore_args *ta)
>> {
>> struct timerfd_info *ti;
>> @@ -163,6 +147,9 @@ static int timerfd_open(struct file_desc *d)
>> goto err_close;
>> }
>>
>> + info->t_fd = file_master(d)->fe->fd;
>> + list_add_tail(&info->rlist, &rst_timerfds);
>> +
>> return tmp;
>>
>> err_close:
>> @@ -173,7 +160,6 @@ static int timerfd_open(struct file_desc *d)
>> static struct file_desc_ops timerfd_desc_ops = {
>> .type = FD_TYPES__TIMERFD,
>> .open = timerfd_open,
>> - .post_open = timerfd_post_open,
>> };
>>
>> static int collect_one_timerfd(void *o, ProtobufCMessage *msg, struct cr_img *i)
>>
>> .
>>
>
More information about the CRIU
mailing list