[CRIU] [PATCH v2 14/28] files: Kill fd_open_state::receive_fd stage
Kirill Tkhai
ktkhai at virtuozzo.com
Mon Dec 5 04:12:45 PST 2016
On 05.12.2016 13:02, Pavel Emelyanov wrote:
> On 11/30/2016 07:31 PM, Kirill Tkhai wrote:
>> Since "receive" stage is used only for slave fds
>> and nobody depends on slave fds receiving is finished,
>> we may move it functionality in "post_open" stage.
>> This just makes slave fds to be received a little bit later.
>
> This requires clarification.
>
> Consider we have files A and B in current.
>
> Before the patch the opening of them looked like
>
> A->open
> B->open
> A->recv
> B->recv
> A->post_open
> B->post_open
>
> now it is like
>
> A->open
> B->open
> A->recv
> A->post_open
> B->recv
> B->post_open
>
> Where did we remove the dependency between A->post_open and B->recv ?
"receive" is used for slave fles only, and masters do not depend
on any slave stages. I just analyzed all file types.
The only exception is ctl_tty, but it is on separate rst_info::tty_ctty list.
I'll add a comment to v3.
> -- Pavel
>
>> Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
>> ---
>> criu/files.c | 22 +++++++++-------------
>> 1 file changed, 9 insertions(+), 13 deletions(-)
>>
>> diff --git a/criu/files.c b/criu/files.c
>> index 8a07da6..23ff3f9 100644
>> --- a/criu/files.c
>> +++ b/criu/files.c
>> @@ -865,7 +865,6 @@ static int post_open_fd(int pid, struct fdinfo_list_entry *fle);
>>
>> static struct fd_open_state states[] = {
>> { "create", open_fd, },
>> - { "receive", receive_fd, },
>> { "post_create", post_open_fd, },
>> };
>>
>> @@ -971,15 +970,17 @@ static int post_open_fd(int pid, struct fdinfo_list_entry *fle)
>> {
>> struct file_desc *d = fle->desc;
>>
>> - if (!d->ops->post_open)
>> - return 0;
>> -
>> - if (is_service_fd(fle->fe->fd, CTL_TTY_OFF))
>> - return d->ops->post_open(d, fle->fe->fd);
>> + if (fle != file_master(d)) {
>> + if (receive_fd(pid, fle) < 0) {
>> + pr_err("Can't receive\n");
>> + return -1;
>> + }
>> + if (!is_service_fd(fle->fe->fd, CTL_TTY_OFF))
>> + return 0;
>> + }
>>
>> - if (fle != file_master(d))
>> + if (!d->ops->post_open)
>> return 0;
>> -
>> return d->ops->post_open(d, fle->fe->fd);
>> }
>>
>> @@ -1034,11 +1035,6 @@ static int open_fd(int pid, struct fdinfo_list_entry *fle)
>> static int receive_fd(int pid, struct fdinfo_list_entry *fle)
>> {
>> int fd;
>> - struct fdinfo_list_entry *flem;
>> -
>> - flem = file_master(fle->desc);
>> - if (flem->pid == pid)
>> - return 0;
>>
>> pr_info("\tReceive fd for %d\n", fle->fe->fd);
>>
>>
>> .
>>
>
More information about the CRIU
mailing list