Re: [PATCH] xs_bind retry binding forever

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2010-10-21 at 13:33 -0500, Ben Myers wrote:
> Retry bind for reserved source ports forever.  Add an error message when we
> have a hard time binding one.

NACK. This approach leads to the process spinning forever in that loop,
which is exactly why we introduced the limit in the first place. See all
the old archived bug report emails about 'rpciod taking 100% cpu'.

Cheers
  Trond

> Signed-off-by: Ben Myers <bpm@xxxxxxx>
> ---
>  net/sunrpc/xprtsock.c |   22 ++++++++++++++++++----
>  1 files changed, 18 insertions(+), 4 deletions(-)
> 
> diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
> index b6309db..79a001b 100644
> --- a/net/sunrpc/xprtsock.c
> +++ b/net/sunrpc/xprtsock.c
> @@ -1560,9 +1560,16 @@ static int xs_bind4(struct sock_xprt *transport, struct socket *sock)
>  		}
>  		last = port;
>  		port = xs_next_srcport(transport, sock, port);
> -		if (port > last)
> +		if (port > last) {
> +			if (nloop > 2 && net_ratelimit()) {
> +				printk("RPC: %s %pI4: Cannot bind reserved "
> +				       "source port.  Consider decreasing "
> +				       "min_resvport.\n",
> +				       __func__, &myaddr.sin_addr);
> +			}
>  			nloop++;
> -	} while (err == -EADDRINUSE && nloop != 2);
> +		}
> +	} while (err == -EADDRINUSE);
>  	dprintk("RPC:       %s %pI4:%u: %s (%d)\n",
>  			__func__, &myaddr.sin_addr,
>  			port, err ? "failed" : "ok", err);
> @@ -1593,9 +1600,16 @@ static int xs_bind6(struct sock_xprt *transport, struct socket *sock)
>  		}
>  		last = port;
>  		port = xs_next_srcport(transport, sock, port);
> -		if (port > last)
> +		if (port > last) {
> +			if (nloop > 2 && net_ratelimit()) {
> +				printk("RPC: %s %pI6: Cannot bind reserved "
> +				       "source port.  Consider decreasing "
> +				       "min_resvport.\n",
> +					__func__, &myaddr.sin6_addr);
> +			}
>  			nloop++;
> -	} while (err == -EADDRINUSE && nloop != 2);
> +		}
> +	} while (err == -EADDRINUSE);
>  	dprintk("RPC:       xs_bind6 %pI6:%u: %s (%d)\n",
>  		&myaddr.sin6_addr, port, err ? "failed" : "ok", err);
>  	return err;
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux