[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