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]
Message-ID: <alpine.DEB.2.00.0912101016040.23376@melkinpaasi.cs.helsinki.fi>
Date:	Thu, 10 Dec 2009 10:17:30 +0200 (EET)
From:	"Ilpo Järvinen" <ilpo.jarvinen@...sinki.fi>
To:	Krishna Kumar <krkumar2@...ibm.com>
cc:	David Miller <davem@...emloft.net>, Netdev <netdev@...r.kernel.org>
Subject: Re: [PATCH 3/3] tcp: Slightly optimize tcp_sendmsg

On Wed, 9 Dec 2009, Krishna Kumar wrote:

> From: Krishna Kumar <krkumar2@...ibm.com>
> 
> Slightly optimize tcp_sendmsg since NETIF_F_SG is used many
> times iteratively in the loop. The only other modification is
> to change:
> 			} else if (i == MAX_SKB_FRAGS ||
> 				   (!i &&
> 				   !(sk->sk_route_caps & NETIF_F_SG))) {
> 	to:
> 			} else if (i == MAX_SKB_FRAGS || !sg) {

I can see that you make this change from the patch itself but could you 
give a justification on why dropping the !i is possible? ...I couldn't
see what would allow that.

> Signed-off-by: Krishna Kumar <krkumar2@...ibm.com>
> ---
>  net/ipv4/tcp.c |   17 +++++++++--------
>  1 file changed, 9 insertions(+), 8 deletions(-)
> 
> diff -ruNp org/net/ipv4/tcp.c new/net/ipv4/tcp.c
> --- org/net/ipv4/tcp.c	2009-12-09 10:01:35.000000000 +0530
> +++ new/net/ipv4/tcp.c	2009-12-09 10:26:42.000000000 +0530
> @@ -878,12 +878,12 @@ ssize_t tcp_sendpage(struct socket *sock
>  #define TCP_PAGE(sk)	(sk->sk_sndmsg_page)
>  #define TCP_OFF(sk)	(sk->sk_sndmsg_off)
>  
> -static inline int select_size(struct sock *sk)
> +static inline int select_size(struct sock *sk, int sg)
>  {
>  	struct tcp_sock *tp = tcp_sk(sk);
>  	int tmp = tp->mss_cache;
>  
> -	if (sk->sk_route_caps & NETIF_F_SG) {
> +	if (sg) {
>  		if (sk_can_gso(sk))
>  			tmp = 0;
>  		else {
> @@ -907,7 +907,7 @@ int tcp_sendmsg(struct kiocb *iocb, stru
>  	struct sk_buff *skb;
>  	int iovlen, flags;
>  	int mss_now, size_goal;
> -	int err, copied;
> +	int sg, err, copied;
>  	long timeo;
>  
>  	lock_sock(sk);
> @@ -935,6 +935,8 @@ int tcp_sendmsg(struct kiocb *iocb, stru
>  	if (sk->sk_err || (sk->sk_shutdown & SEND_SHUTDOWN))
>  		goto out_err;
>  
> +	sg = sk->sk_route_caps & NETIF_F_SG;
> +
>  	while (--iovlen >= 0) {
>  		int seglen = iov->iov_len;
>  		unsigned char __user *from = iov->iov_base;
> @@ -960,8 +962,9 @@ new_segment:
>  				if (!sk_stream_memory_free(sk))
>  					goto wait_for_sndbuf;
>  
> -				skb = sk_stream_alloc_skb(sk, select_size(sk),
> -						sk->sk_allocation);
> +				skb = sk_stream_alloc_skb(sk,
> +							  select_size(sk, sg),
> +							  sk->sk_allocation);
>  				if (!skb)
>  					goto wait_for_memory;
>  
> @@ -998,9 +1001,7 @@ new_segment:
>  					/* We can extend the last page
>  					 * fragment. */
>  					merge = 1;
> -				} else if (i == MAX_SKB_FRAGS ||
> -					   (!i &&
> -					   !(sk->sk_route_caps & NETIF_F_SG))) {
> +				} else if (i == MAX_SKB_FRAGS || !sg) {
>  					/* Need to add new fragment and cannot
>  					 * do this because interface is non-SG,
>  					 * or because all the page slots are
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@...r.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ