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 /include/net/sock.h | |
parent | 090cce42639c2c82bce2cc26a902e4c674c62882 (diff) | |
download | linux-9fe516ba3fb29b6f6a752ffd93342fdee500ec01.tar.gz linux-9fe516ba3fb29b6f6a752ffd93342fdee500ec01.tar.bz2 linux-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 'include/net/sock.h')
-rw-r--r-- | include/net/sock.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/include/net/sock.h b/include/net/sock.h index 173cae485de1..8d4c9473e7d7 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -181,7 +181,8 @@ struct sock_common { unsigned short skc_family; volatile unsigned char skc_state; unsigned char skc_reuse:4; - unsigned char skc_reuseport:4; + unsigned char skc_reuseport:1; + unsigned char skc_ipv6only:1; int skc_bound_dev_if; union { struct hlist_node skc_bind_node; @@ -317,6 +318,7 @@ struct sock { #define sk_state __sk_common.skc_state #define sk_reuse __sk_common.skc_reuse #define sk_reuseport __sk_common.skc_reuseport +#define sk_ipv6only __sk_common.skc_ipv6only #define sk_bound_dev_if __sk_common.skc_bound_dev_if #define sk_bind_node __sk_common.skc_bind_node #define sk_prot __sk_common.skc_prot |