lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Fri, 6 Feb 2009 22:53:32 +0200 (EET)
From:	"Ilpo Järvinen" <ilpo.jarvinen@...sinki.fi>
To:	bfields@...ldses.org
cc:	David Miller <davem@...emloft.net>, Netdev <netdev@...r.kernel.org>
Subject: Re: [PATCH] net/sunrpc/xprtsock.c: some common code found

Grr, forgot to cc sunrpc maintainer... Added. Just ask if somebody wants 
a complete resend.

On Fri, 6 Feb 2009, Ilpo Järvinen wrote:

> 
> $ diff-funcs xs_udp_write_space net/sunrpc/xprtsock.c
> net/sunrpc/xprtsock.c xs_tcp_write_space
>  --- net/sunrpc/xprtsock.c:xs_udp_write_space()
>  +++ net/sunrpc/xprtsock.c:xs_tcp_write_space()
> @@ -1,4 +1,4 @@
> - * xs_udp_write_space - callback invoked when socket buffer space
> + * xs_tcp_write_space - callback invoked when socket buffer space
>   *                             becomes available
>   * @sk: socket whose state has changed
>   *
> @@ -7,12 +7,12 @@
>   * progress, otherwise we'll waste resources thrashing kernel_sendmsg
>   * with a bunch of small requests.
>   */
> -static void xs_udp_write_space(struct sock *sk)
> +static void xs_tcp_write_space(struct sock *sk)
>  {
>  	read_lock(&sk->sk_callback_lock);
> 
> -	/* from net/core/sock.c:sock_def_write_space */
> -	if (sock_writeable(sk)) {
> +	/* from net/core/stream.c:sk_stream_write_space */
> +	if (sk_stream_wspace(sk) >= sk_stream_min_wspace(sk)) {
>  		struct socket *sock;
>  		struct rpc_xprt *xprt;
> 
> 
> $ codiff net/sunrpc/xprtsock.o net/sunrpc/xprtsock.o.new
> net/sunrpc/xprtsock.c:
>   xs_tcp_write_space | -163
>   xs_udp_write_space | -163
>  2 functions changed, 326 bytes removed
> 
> net/sunrpc/xprtsock.c:
>   xs_write_space | +179
>  1 function changed, 179 bytes added
> 
> net/sunrpc/xprtsock.o.new:
>  3 functions changed, 179 bytes added, 326 bytes removed, diff: -147
> 
> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@...sinki.fi>
> ---
>  net/sunrpc/xprtsock.c |   53 +++++++++++++++++++-----------------------------
>  1 files changed, 21 insertions(+), 32 deletions(-)
> 
> diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
> index 5cbb404..b49e434 100644
> --- a/net/sunrpc/xprtsock.c
> +++ b/net/sunrpc/xprtsock.c
> @@ -1215,6 +1215,23 @@ out:
>  	read_unlock(&sk->sk_callback_lock);
>  }
>  
> +static void xs_write_space(struct sock *sk)
> +{
> +	struct socket *sock;
> +	struct rpc_xprt *xprt;
> +
> +	if (unlikely(!(sock = sk->sk_socket)))
> +		return;
> +	clear_bit(SOCK_NOSPACE, &sock->flags);
> +
> +	if (unlikely(!(xprt = xprt_from_sock(sk))))
> +		return;
> +	if (test_and_clear_bit(SOCK_ASYNC_NOSPACE, &sock->flags) == 0)
> +		return;
> +
> +	xprt_write_space(xprt);
> +}
> +
>  /**
>   * xs_udp_write_space - callback invoked when socket buffer space
>   *                             becomes available
> @@ -1230,23 +1247,9 @@ static void xs_udp_write_space(struct sock *sk)
>  	read_lock(&sk->sk_callback_lock);
>  
>  	/* from net/core/sock.c:sock_def_write_space */
> -	if (sock_writeable(sk)) {
> -		struct socket *sock;
> -		struct rpc_xprt *xprt;
> -
> -		if (unlikely(!(sock = sk->sk_socket)))
> -			goto out;
> -		clear_bit(SOCK_NOSPACE, &sock->flags);
> -
> -		if (unlikely(!(xprt = xprt_from_sock(sk))))
> -			goto out;
> -		if (test_and_clear_bit(SOCK_ASYNC_NOSPACE, &sock->flags) == 0)
> -			goto out;
> -
> -		xprt_write_space(xprt);
> -	}
> +	if (sock_writeable(sk))
> +		xs_write_space(sk);
>  
> - out:
>  	read_unlock(&sk->sk_callback_lock);
>  }
>  
> @@ -1265,23 +1268,9 @@ static void xs_tcp_write_space(struct sock *sk)
>  	read_lock(&sk->sk_callback_lock);
>  
>  	/* from net/core/stream.c:sk_stream_write_space */
> -	if (sk_stream_wspace(sk) >= sk_stream_min_wspace(sk)) {
> -		struct socket *sock;
> -		struct rpc_xprt *xprt;
> -
> -		if (unlikely(!(sock = sk->sk_socket)))
> -			goto out;
> -		clear_bit(SOCK_NOSPACE, &sock->flags);
> +	if (sk_stream_wspace(sk) >= sk_stream_min_wspace(sk))
> +		xs_write_space(sk);
>  
> -		if (unlikely(!(xprt = xprt_from_sock(sk))))
> -			goto out;
> -		if (test_and_clear_bit(SOCK_ASYNC_NOSPACE, &sock->flags) == 0)
> -			goto out;
> -
> -		xprt_write_space(xprt);
> -	}
> -
> - out:
>  	read_unlock(&sk->sk_callback_lock);
>  }
>  
> 

Powered by blists - more mailing lists