|
@@ -266,7 +266,7 @@ static inline int sk_reuseport_match(struct inet_bind_bucket *tb,
|
|
|
#if IS_ENABLED(CONFIG_IPV6)
|
|
|
if (tb->fast_sk_family == AF_INET6)
|
|
|
return ipv6_rcv_saddr_equal(&tb->fast_v6_rcv_saddr,
|
|
|
- &sk->sk_v6_rcv_saddr,
|
|
|
+ inet6_rcv_saddr(sk),
|
|
|
tb->fast_rcv_saddr,
|
|
|
sk->sk_rcv_saddr,
|
|
|
tb->fast_ipv6_only,
|
|
@@ -321,13 +321,14 @@ tb_found:
|
|
|
goto fail_unlock;
|
|
|
}
|
|
|
success:
|
|
|
- if (!hlist_empty(&tb->owners)) {
|
|
|
+ if (hlist_empty(&tb->owners)) {
|
|
|
tb->fastreuse = reuse;
|
|
|
if (sk->sk_reuseport) {
|
|
|
tb->fastreuseport = FASTREUSEPORT_ANY;
|
|
|
tb->fastuid = uid;
|
|
|
tb->fast_rcv_saddr = sk->sk_rcv_saddr;
|
|
|
tb->fast_ipv6_only = ipv6_only_sock(sk);
|
|
|
+ tb->fast_sk_family = sk->sk_family;
|
|
|
#if IS_ENABLED(CONFIG_IPV6)
|
|
|
tb->fast_v6_rcv_saddr = sk->sk_v6_rcv_saddr;
|
|
|
#endif
|
|
@@ -354,6 +355,7 @@ success:
|
|
|
tb->fastuid = uid;
|
|
|
tb->fast_rcv_saddr = sk->sk_rcv_saddr;
|
|
|
tb->fast_ipv6_only = ipv6_only_sock(sk);
|
|
|
+ tb->fast_sk_family = sk->sk_family;
|
|
|
#if IS_ENABLED(CONFIG_IPV6)
|
|
|
tb->fast_v6_rcv_saddr = sk->sk_v6_rcv_saddr;
|
|
|
#endif
|