diff options
author | Eric Dumazet <edumazet@google.com> | 2014-06-27 08:36:16 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-07-01 23:46:21 -0700 |
commit | 9fe516ba3fb29b6f6a752ffd93342fdee500ec01 (patch) | |
tree | 4254ea02ed5d51d92fd7109d33d28bc95b8d3fb1 /net/ipv6/ipv6_sockglue.c | |
parent | 090cce42639c2c82bce2cc26a902e4c674c62882 (diff) | |
download | linux-stable-9fe516ba3fb29b6f6a752ffd93342fdee500ec01.tar.gz linux-stable-9fe516ba3fb29b6f6a752ffd93342fdee500ec01.tar.bz2 linux-stable-9fe516ba3fb29b6f6a752ffd93342fdee500ec01.zip |
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/ipv6/ipv6_sockglue.c')
-rw-r--r-- | net/ipv6/ipv6_sockglue.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index edb58aff4ae7..cc34f65179e4 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c @@ -235,7 +235,7 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname, if (optlen < sizeof(int) || inet_sk(sk)->inet_num) goto e_inval; - np->ipv6only = valbool; + sk->sk_ipv6only = valbool; retv = 0; break; @@ -1058,7 +1058,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname, } case IPV6_V6ONLY: - val = np->ipv6only; + val = sk->sk_ipv6only; break; case IPV6_RECVPKTINFO: |