[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