[CRIU] [PATCH v2 04/15] unix: Link all sockets in unix_sockets list

Pavel Emelyanov xemul at virtuozzo.com
Mon May 30 04:38:58 PDT 2016


On 05/27/2016 04:06 PM, Kirill Tkhai wrote:
> List "unix_sockets" is used to link external sockets.

Dump-time. On restore time this list already contains all the sockets.

> Change this, to link all unix sockets there. To differ
> really external sockets in fix_external_unix_sockets(),
> we may check for socket's already_dumped value.
> 
> This may be useful to traverse over all unix sockets
> in a namespace.

Dump-time.
Please, explain why do you need to traverse all unix sockets dump time.

> Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
> ---
>  criu/sk-unix.c |   13 +++++--------
>  1 file changed, 5 insertions(+), 8 deletions(-)
> 
> diff --git a/criu/sk-unix.c b/criu/sk-unix.c
> index 3363cea..40cb9db 100644
> --- a/criu/sk-unix.c
> +++ b/criu/sk-unix.c
> @@ -364,11 +364,7 @@ static int dump_one_unix_fd(int lfd, u32 id, const struct fd_parms *p)
>  		 * until all sockets the program owns are processed.
>  		 */
>  		if (!peer->sd.already_dumped) {
> -			if (list_empty(&peer->list)) {
> -				show_one_unix("Add a peer", peer);
> -				list_add_tail(&peer->list, &unix_sockets);
> -			}
> -
> +			show_one_unix("Add a peer", peer);
>  			list_add(&sk->peer_node, &peer->peer_list);
>  			sk->fd = dup(lfd);
>  			if (sk->fd < 0) {
> @@ -464,7 +460,6 @@ static int dump_one_unix_fd(int lfd, u32 id, const struct fd_parms *p)
>  	if (list_empty(&sk->peer_node) && write_unix_entry(sk))
>  		return -1;
>  
> -	list_del_init(&sk->list);
>  	sk->sd.already_dumped = 1;
>  
>  	while (!list_empty(&sk->peer_list)) {
> @@ -677,6 +672,7 @@ static int unix_collect_one(const struct unix_diag_msg *m,
>  	}
>  
>  	sk_collect_one(m->udiag_ino, AF_UNIX, &d->sd);
> +	list_add_tail(&d->list, &unix_sockets);
>  	show_one_unix("Collected", d);
>  
>  	return 0;
> @@ -757,9 +753,10 @@ int fix_external_unix_sockets(void)
>  		FownEntry fown = FOWN_ENTRY__INIT;
>  		SkOptsEntry skopts = SK_OPTS_ENTRY__INIT;
>  
> -		show_one_unix("Dumping extern", sk);
> +		if (sk->sd.already_dumped)
> +			continue;
>  
> -		BUG_ON(sk->sd.already_dumped);
> +		show_one_unix("Dumping extern", sk);
>  
>  		fd_id_generate_special(NULL, &e.id);
>  		e.ino		= sk->sd.ino;
> 
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
> .
> 



More information about the CRIU mailing list