summaryrefslogtreecommitdiffstats
path: root/net/dccp
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2014-06-27 11:36:16 -0400
committerDavid S. Miller <davem@davemloft.net>2014-07-02 02:46:21 -0400
commit9fe516ba3fb29b6f6a752ffd93342fdee500ec01 (patch)
tree4254ea02ed5d51d92fd7109d33d28bc95b8d3fb1 /net/dccp
parent090cce42639c2c82bce2cc26a902e4c674c62882 (diff)
inet: move ipv6only in sock_common
When an UDP application switches from AF_INET to AF_INET6 sockets, we have a small performance degradation for IPv4 communications because of extra cache line misses to access ipv6only information. This can also be noticed for TCP listeners, as ipv6_only_sock() is also used from __inet_lookup_listener()->compute_score() This is magnified when SO_REUSEPORT is used. Move ipv6only into struct sock_common so that it is available at no extra cost in lookups. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/dccp')
-rw-r--r--net/dccp/minisocks.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/net/dccp/minisocks.c b/net/dccp/minisocks.c
index c69eb9c4fbb8..b50dc436db1f 100644
--- a/net/dccp/minisocks.c
+++ b/net/dccp/minisocks.c
@@ -55,11 +55,9 @@ void dccp_time_wait(struct sock *sk, int state, int timeo)
55 const int rto = (icsk->icsk_rto << 2) - (icsk->icsk_rto >> 1); 55 const int rto = (icsk->icsk_rto << 2) - (icsk->icsk_rto >> 1);
56#if IS_ENABLED(CONFIG_IPV6) 56#if IS_ENABLED(CONFIG_IPV6)
57 if (tw->tw_family == PF_INET6) { 57 if (tw->tw_family == PF_INET6) {
58 const struct ipv6_pinfo *np = inet6_sk(sk);
59
60 tw->tw_v6_daddr = sk->sk_v6_daddr; 58 tw->tw_v6_daddr = sk->sk_v6_daddr;
61 tw->tw_v6_rcv_saddr = sk->sk_v6_rcv_saddr; 59 tw->tw_v6_rcv_saddr = sk->sk_v6_rcv_saddr;
62 tw->tw_ipv6only = np->ipv6only; 60 tw->tw_ipv6only = sk->sk_ipv6only;
63 } 61 }
64#endif 62#endif
65 /* Linkage updates. */ 63 /* Linkage updates. */