[<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