Message ID | 1547655465-16133-1-git-send-email-alexey.kodanev@oracle.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [net,1/2] udp: add missing rehash callback to udplite | expand |
On Wed, Jan 16, 2019 at 8:08 AM Alexey Kodanev <alexey.kodanev@oracle.com> wrote: > > After commit 4cdeeee9252a ("net: udp: prefer listeners bound to an > address"), UDP-Lite only works when specifying a local address for > the sockets. > > This is related to the problem addressed in the commit 719f835853a9 > ("udp: add rehash on connect()"). Moreover, __udp4_lib_lookup() now > looks for a socket immediately in the secondary hash table. > > The issue was found with LTP/network tests (UDP-Lite test-cases). > > Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Note that we prefer having the Fixes: tag to help automation. Thanks !
From: Alexey Kodanev <alexey.kodanev@oracle.com> Date: Wed, 16 Jan 2019 19:17:44 +0300 > After commit 4cdeeee9252a ("net: udp: prefer listeners bound to an > address"), UDP-Lite only works when specifying a local address for > the sockets. > > This is related to the problem addressed in the commit 719f835853a9 > ("udp: add rehash on connect()"). Moreover, __udp4_lib_lookup() now > looks for a socket immediately in the secondary hash table. > > The issue was found with LTP/network tests (UDP-Lite test-cases). > > Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com> Applied with Fixes: tag added.
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 3fb0ed5..26d3a4c 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -1918,7 +1918,7 @@ void udp_lib_rehash(struct sock *sk, u16 newhash) } EXPORT_SYMBOL(udp_lib_rehash); -static void udp_v4_rehash(struct sock *sk) +void udp_v4_rehash(struct sock *sk) { u16 new_hash = ipv4_portaddr_hash(sock_net(sk), inet_sk(sk)->inet_rcv_saddr, diff --git a/net/ipv4/udp_impl.h b/net/ipv4/udp_impl.h index 3226726..6b2fa77 100644 --- a/net/ipv4/udp_impl.h +++ b/net/ipv4/udp_impl.h @@ -10,6 +10,7 @@ int __udp4_lib_err(struct sk_buff *, u32, struct udp_table *); int udp_v4_get_port(struct sock *sk, unsigned short snum); +void udp_v4_rehash(struct sock *sk); int udp_setsockopt(struct sock *sk, int level, int optname, char __user *optval, unsigned int optlen); diff --git a/net/ipv4/udplite.c b/net/ipv4/udplite.c index 39c7f17..3c94b8f 100644 --- a/net/ipv4/udplite.c +++ b/net/ipv4/udplite.c @@ -53,6 +53,7 @@ struct proto udplite_prot = { .sendpage = udp_sendpage, .hash = udp_lib_hash, .unhash = udp_lib_unhash, + .rehash = udp_v4_rehash, .get_port = udp_v4_get_port, .memory_allocated = &udp_memory_allocated, .sysctl_mem = sysctl_udp_mem,
After commit 4cdeeee9252a ("net: udp: prefer listeners bound to an address"), UDP-Lite only works when specifying a local address for the sockets. This is related to the problem addressed in the commit 719f835853a9 ("udp: add rehash on connect()"). Moreover, __udp4_lib_lookup() now looks for a socket immediately in the secondary hash table. The issue was found with LTP/network tests (UDP-Lite test-cases). Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com> --- net/ipv4/udp.c | 2 +- net/ipv4/udp_impl.h | 1 + net/ipv4/udplite.c | 1 + 3 files changed, 3 insertions(+), 1 deletion(-)