[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20230530010348.21425-13-kuniyu@amazon.com>
Date: Mon, 29 May 2023 18:03:46 -0700
From: Kuniyuki Iwashima <kuniyu@...zon.com>
To: "David S. Miller" <davem@...emloft.net>, Eric Dumazet
<edumazet@...gle.com>, Jakub Kicinski <kuba@...nel.org>, Paolo Abeni
<pabeni@...hat.com>, David Ahern <dsahern@...nel.org>, Willem de Bruijn
<willemdebruijn.kernel@...il.com>
CC: Kuniyuki Iwashima <kuniyu@...zon.com>, Kuniyuki Iwashima
<kuni1840@...il.com>, <netdev@...r.kernel.org>
Subject: [PATCH v1 net-next 12/14] udp: Remove udp_table in struct proto.
We managed UDP-Lite sockets in a global hash table (udplite_table) that
we can get from the global per-protocol variable, sk_prot->h.udp_table.
OTOH, we use per-netns hash tables for UDP, so we set NULL to
sk_prot->h.udp_table.
When we got a hash table, we needed to check if sk_prot->h.udp_table was
NULL to get a proper one.
However, we no longer support UDP-Lite and always use the per-netns hash
table without the test. Also, we can remove h.udp_table in struct proto.
Signed-off-by: Kuniyuki Iwashima <kuniyu@...zon.com>
---
include/net/sock.h | 1 -
net/ipv4/udp.c | 16 +++++++---------
net/ipv6/udp.c | 1 -
3 files changed, 7 insertions(+), 11 deletions(-)
diff --git a/include/net/sock.h b/include/net/sock.h
index 0b6c74bdd688..52f56a01b590 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -1339,7 +1339,6 @@ struct proto {
union {
struct inet_hashinfo *hashinfo;
- struct udp_table *udp_table;
struct raw_hashinfo *raw_hash;
struct smc_hashinfo *smc_hash;
} h;
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index eb968d20d5a8..8b460e0e73bc 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -132,11 +132,6 @@ EXPORT_PER_CPU_SYMBOL_GPL(udp_memory_per_cpu_fw_alloc);
#define MAX_UDP_PORTS 65536
#define PORTS_PER_CHAIN (MAX_UDP_PORTS / UDP_HTABLE_SIZE_MIN_PERNET)
-static struct udp_table *udp_get_table_prot(struct sock *sk)
-{
- return sk->sk_prot->h.udp_table ? : sock_net(sk)->ipv4.udp_table;
-}
-
static int udp_lib_lport_inuse(struct net *net, __u16 num,
const struct udp_hslot *hslot,
unsigned long *bitmap,
@@ -238,11 +233,13 @@ static int udp_reuseport_add_sock(struct sock *sk, struct udp_hslot *hslot)
int udp_lib_get_port(struct sock *sk, unsigned short snum,
unsigned int hash2_nulladdr)
{
- struct udp_table *udptable = udp_get_table_prot(sk);
struct udp_hslot *hslot, *hslot2;
struct net *net = sock_net(sk);
+ struct udp_table *udptable;
int error = -EADDRINUSE;
+ udptable = net->ipv4.udp_table;
+
if (!snum) {
DECLARE_BITMAP(bitmap, PORTS_PER_CHAIN);
unsigned short first, last;
@@ -1945,10 +1942,11 @@ EXPORT_SYMBOL(udp_disconnect);
void udp_lib_unhash(struct sock *sk)
{
if (sk_hashed(sk)) {
- struct udp_table *udptable = udp_get_table_prot(sk);
struct udp_hslot *hslot, *hslot2;
struct net *net = sock_net(sk);
+ struct udp_table *udptable;
+ udptable = net->ipv4.udp_table;
hslot = udp_hashslot(udptable, net, udp_sk(sk)->udp_port_hash);
hslot2 = udp_hashslot2(udptable, udp_sk(sk)->udp_portaddr_hash);
@@ -1976,10 +1974,11 @@ EXPORT_SYMBOL(udp_lib_unhash);
void udp_lib_rehash(struct sock *sk, u16 newhash)
{
if (sk_hashed(sk)) {
- struct udp_table *udptable = udp_get_table_prot(sk);
struct udp_hslot *hslot, *hslot2, *nhslot2;
struct net *net = sock_net(sk);
+ struct udp_table *udptable;
+ udptable = net->ipv4.udp_table;
hslot2 = udp_hashslot2(udptable, udp_sk(sk)->udp_portaddr_hash);
nhslot2 = udp_hashslot2(udptable, newhash);
udp_sk(sk)->udp_portaddr_hash = newhash;
@@ -2819,7 +2818,6 @@ struct proto udp_prot = {
.sysctl_wmem_offset = offsetof(struct net, ipv4.sysctl_udp_wmem_min),
.sysctl_rmem_offset = offsetof(struct net, ipv4.sysctl_udp_rmem_min),
.obj_size = sizeof(struct udp_sock),
- .h.udp_table = NULL,
.diag_destroy = udp_abort,
};
EXPORT_SYMBOL(udp_prot);
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index 6f5c29af4157..23480b84ba08 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -1778,7 +1778,6 @@ struct proto udpv6_prot = {
.sysctl_wmem_offset = offsetof(struct net, ipv4.sysctl_udp_wmem_min),
.sysctl_rmem_offset = offsetof(struct net, ipv4.sysctl_udp_rmem_min),
.obj_size = sizeof(struct udp6_sock),
- .h.udp_table = NULL,
.diag_destroy = udp_abort,
};
--
2.30.2
Powered by blists - more mailing lists