23.01.2018 11:17, Kirill Tkhai пишет:
> On 23.01.2018 13:14, Stanislav Kinsburskiy wrote:
>>
>>
>> 23.01.2018 11:09, Kirill Tkhai пишет:
>>> On 23.01.2018 13:07, Stanislav Kinsburskiy wrote:
>>>>
>>>>
>>>> 23.01.2018 10:51, Kirill Tkhai пишет:
>>>>> On 23.01.2018 12:48, Stanislav Kinsburskiy wrote:
>>>>>> Please, see a couple of nits below
>>>>>>
>>>>>> 23.01.2018 10:41, Kirill Tkhai пишет:
>>>>>>> Stanislav Kinsburskiy says:
>>>>>>>
>>>>>>> "SPFS manager has a special "--exit-with-spfs" options, which is used 
>>>>>>> by CRIU.
>>>>>>>  The idea of the option is simple: force SPFS manager to exit, when it 
>>>>>>> has some
>>>>>>>  SPFS processes among its children (i.e. spfs was mounted at least 
>>>>>>> once),
>>>>>>>  but all these processes have exited for whatever reason (which usually 
>>>>>>> happens
>>>>>>>  when restore has failed and spfs mounts where unmounted).
>>>>>>>  Although it works in overall (main SPFS manager process exits), its 
>>>>>>> children
>>>>>>>  (responsible to SPFS replacement) may wait on FUTEX for "release" 
>>>>>>> command
>>>>>>>  for corresponding SPFS mount and thus never stop until they are 
>>>>>>> killed".
>>>>>>>
>>>>>>> 1 spfs-manager
>>>>>>> 2   \_ spfs
>>>>>>> 3   \_ spfs-manager
>>>>>>> 4   \_ spfs
>>>>>>> 5   \_ spfs-manager
>>>>>>>
>>>>>>> 2 and 3 are pair of a mount, and 4 and 5 are pair of another mount.
>>>>>>> The patch makes spfs-manager 1 kill 3 in case of 2 exited.
>>>>>>>
>>>>>>> https://jira.sw.ru/browse/PSBM-80055
>>>>>>>
>>>>>>> Signed-off-by: Kirill Tkhai <ktk...@virtuozzo.com>
>>>>>>> ---
>>>>>>>  manager/context.c |    4 ++++
>>>>>>>  manager/spfs.c    |    1 +
>>>>>>>  2 files changed, 5 insertions(+)
>>>>>>>
>>>>>>> diff --git a/manager/context.c b/manager/context.c
>>>>>>> index 1eb37c9..4464a23 100644
>>>>>>> --- a/manager/context.c
>>>>>>> +++ b/manager/context.c
>>>>>>> @@ -53,6 +53,9 @@ static void cleanup_spfs_mount(struct 
>>>>>>> spfs_manager_context_s *ctx,
>>>>>>>                 /* SPFS master was killed. We need to release the 
>>>>>>> reference */
>>>>>>>                 spfs_release_mnt(info);
>>>>>>>  
>>>>>>> +       if (killed || WEXITSTATUS(status))
>>>>>>> +               kill(info->replacer, SIGKILL);
>>>>>>> +
>>>>>>
>>>>>> There is "if (killed)" check above.
>>>>>> Could you please move this hunk there?
>>>>>
>>>>> There is logical OR (||) in the hunk. How should I move it to 
>>>>> unconditional check?
>>>>>
>>>>
>>>> Ah, ok. Then let the check be as it is.
>>>> Could you please add warning message for this kill with the process pid 
>>>> being killed and the reason why (spfs was killed of exited with error)?
>>>
>>> Maybe we should call spfs_release_mnt() in case of exit status != 0 too?
>>>
>>
>> Well, this makes sense.
>> If spfs exited with non-zero result (either it was killed or exited due to 
>> some error), then there is no need in replacer. And there is no need in the 
>> reference.
>> So, probably this check you proposed should be used for both 
>> spfs_release_mnt(info) and kill(info->replacer, SIGKILL).
> 
> Are you OK with this change sent in the only patch, or should we use one more 
> patch?
> 

I think one patch is OK. Only mention the change explicitly in the patch 
description, please.
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to