[CRIU] Re: [PATCH] inet: increase socket buffers for restoring queues

Pavel Emelyanov xemul at parallels.com
Thu Nov 1 06:43:39 EDT 2012


On 10/31/2012 01:53 PM, Andrey Vagin wrote:
> Sizes of send and recv buffers are set to maximum to restore queues,
> after that sizes of buffers are restored.
> 
> O_NONBLOCK is set to a socket to prevent blocking during restore.
> 
> https://bugzilla.openvz.org/show_bug.cgi?id=2411

The same stays true for unix sockets. Plz, make the code more
generic for both.

> Signed-off-by: Andrey Vagin <avagin at openvz.org>
> ---
>  sk-inet.c | 29 +++++++++++++++++++++++++++++
>  1 file changed, 29 insertions(+)
> 
> diff --git a/sk-inet.c b/sk-inet.c
> index 6382bd5..fc3c7fa 100644
> --- a/sk-inet.c
> +++ b/sk-inet.c
> @@ -435,6 +435,32 @@ static int post_open_inet_sk(struct file_desc *d, int sk)
>  	return 0;
>  }
>  
> +static int rst_prep_inet_sk(int sk)
> +{
> +	int flags;
> +
> +	/* In kernel a bufsize has type int and a value is doubled. */
> +	u32 maxbuf = INT_MAX / 2;
> +
> +	if (restore_opt(sk, SOL_SOCKET, SO_SNDBUFFORCE, &maxbuf))
> +		return -1;
> +	if (restore_opt(sk, SOL_SOCKET, SO_RCVBUFFORCE, &maxbuf))
> +		return -1;
> +
> +	/* Prevent blocking on restore */
> +	flags = fcntl(sk, F_GETFL, 0);
> +	if (flags == -1) {
> +		pr_perror("Unable to get flags for %d", sk);
> +		return -1;
> +	}
> +	if (fcntl(sk, F_SETFL, flags | O_NONBLOCK) ) {
> +		pr_perror("Unable to set O_NONBLOCK for %d", sk);
> +		return -1;
> +	}
> +
> +	return 0;
> +}
> +
>  static int open_inet_sk(struct file_desc *d)
>  {
>  	struct inet_sk_info *ii;
> @@ -465,6 +491,9 @@ static int open_inet_sk(struct file_desc *d)
>  		return -1;
>  	}
>  
> +	if (rst_prep_inet_sk(sk))
> +		return -1;
> +
>  	if (ie->v6only) {
>  		if (restore_opt(sk, SOL_IPV6, IPV6_V6ONLY, &yes) == -1)
>  			return -1;
> 




More information about the CRIU mailing list