icmp: No need to call sk_write_space()
authorEric Dumazet <eric.dumazet@gmail.com>
Thu, 24 Sep 2009 12:16:51 +0000 (12:16 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 5 Oct 2009 07:21:54 +0000 (00:21 -0700)
We can make icmp messages tx completion callback a litle bit faster.

Setting SOCK_USE_WRITE_QUEUE sk flag tells sock_wfree() to
not call sk_write_space() on a socket we know no thread is posssibly
waiting for write space. (on per cpu kernel internal icmp sockets only)

This avoids the sock_def_write_space() call and
read_lock(&sk->sk_callback_lock)/read_unlock(&sk->sk_callback_lock) calls
as well.

We avoid three atomic ops.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/icmp.c

index 5bc13fe816d125780d1b5518560dda663817e80e..84adb5754c96548b9f5e25ee1041c04d0e7d2190 100644 (file)
@@ -1165,6 +1165,10 @@ static int __net_init icmp_sk_init(struct net *net)
                sk->sk_sndbuf =
                        (2 * ((64 * 1024) + sizeof(struct sk_buff)));
 
+               /*
+                * Speedup sock_wfree()
+                */
+               sock_set_flag(sk, SOCK_USE_WRITE_QUEUE);
                inet_sk(sk)->pmtudisc = IP_PMTUDISC_DONT;
        }