[CRIU] [PATCH 3/3] mount: wait when mntns will be created to get its root

Pavel Emelyanov xemul at parallels.com
Fri Nov 13 08:58:26 PST 2015


On 11/13/2015 05:56 PM, Andrey Vagin wrote:
> From: Andrew Vagin <avagin at virtuozzo.com>
> 
> Reported-by: Andrey Ryabinin <aryabinin at virtuozzo.com>
> Signed-off-by: Andrew Vagin <avagin at virtuozzo.com>
> ---
>  mount.c      | 2 ++
>  namespaces.c | 1 +
>  2 files changed, 3 insertions(+)
> 
> diff --git a/mount.c b/mount.c
> index 9666e5a..df1fdf9 100644
> --- a/mount.c
> +++ b/mount.c
> @@ -2929,6 +2929,8 @@ set_root:
>  
>  int mntns_get_root_fd(struct ns_id *mntns)
>  {
> +	if (mntns->type != NS_ROOT)
> +		futex_wait_while_eq(&mntns->ns_created, 0);

Huh? All the namespaces are "created" by root task before forking
the others in patch #2.

>  	return __mntns_get_root_fd(mntns->ns_pid);
>  }
>  
> diff --git a/namespaces.c b/namespaces.c
> index 1123492..a2293c3 100644
> --- a/namespaces.c
> +++ b/namespaces.c
> @@ -268,6 +268,7 @@ static unsigned int generate_ns_id(int pid, unsigned int kid, struct ns_desc *nd
>  
>  	nsid->type = type;
>  	nsid->kid = kid;
> +	futex_set(&nsid->ns_created, 1);
>  	nsid_add(nsid, nd, ns_next_id++, pid);
>  
>  found:
> 



More information about the CRIU mailing list