summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKuniyuki Iwashima <kuniyu@google.com>2026-03-11 08:19:58 +0300
committerJakub Kicinski <kuba@kernel.org>2026-03-14 04:57:45 +0300
commitc570bd25d88a02c249be23850315435ec69808f5 (patch)
tree7fc4655b52ae486f8dd9bb0789cfe3c9cc31d43f
parent5c2738588621a4a53e3a1e87860abcaf9190194a (diff)
downloadlinux-c570bd25d88a02c249be23850315435ec69808f5.tar.xz
udp: Remove udp_table in struct udp_seq_afinfo.
Since UDP and UDP-Lite had dedicated socket hash tables for each, we have had to fetch them from different pointers for procfs or bpf iterator. UDP always has its global or per-netns table in net->ipv4.udp_table and struct udp_seq_afinfo.udp_table is NULL. OTOH, UDP-Lite had only one global table in the pointer. We no longer use the field. Let's remove it and udp_get_table_seq(). Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com> Reviewed-by: Willem de Bruijn <willemb@google.com> Link: https://patch.msgid.link/20260311052020.1213705-12-kuniyu@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-rw-r--r--include/net/udp.h1
-rw-r--r--net/ipv4/udp.c22
-rw-r--r--net/ipv6/udp.c1
3 files changed, 4 insertions, 20 deletions
diff --git a/include/net/udp.h b/include/net/udp.h
index bc275cda9f8c..76f401988353 100644
--- a/include/net/udp.h
+++ b/include/net/udp.h
@@ -552,7 +552,6 @@ static inline int copy_linear_skb(struct sk_buff *skb, int len, int off,
#ifdef CONFIG_PROC_FS
struct udp_seq_afinfo {
sa_family_t family;
- struct udp_table *udp_table;
};
struct udp_iter_state {
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index a7ca727347ce..14b372b211be 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -3194,19 +3194,6 @@ static bool seq_sk_match(struct seq_file *seq, const struct sock *sk)
#ifdef CONFIG_BPF_SYSCALL
static const struct seq_operations bpf_iter_udp_seq_ops;
#endif
-static struct udp_table *udp_get_table_seq(struct seq_file *seq,
- struct net *net)
-{
- const struct udp_seq_afinfo *afinfo;
-
-#ifdef CONFIG_BPF_SYSCALL
- if (seq->op == &bpf_iter_udp_seq_ops)
- return net->ipv4.udp_table;
-#endif
-
- afinfo = pde_data(file_inode(seq->file));
- return afinfo->udp_table ? : net->ipv4.udp_table;
-}
static struct sock *udp_get_first(struct seq_file *seq, int start)
{
@@ -3215,7 +3202,7 @@ static struct sock *udp_get_first(struct seq_file *seq, int start)
struct udp_table *udptable;
struct sock *sk;
- udptable = udp_get_table_seq(seq, net);
+ udptable = net->ipv4.udp_table;
for (state->bucket = start; state->bucket <= udptable->mask;
++state->bucket) {
@@ -3247,7 +3234,7 @@ static struct sock *udp_get_next(struct seq_file *seq, struct sock *sk)
} while (sk && !seq_sk_match(seq, sk));
if (!sk) {
- udptable = udp_get_table_seq(seq, net);
+ udptable = net->ipv4.udp_table;
if (state->bucket <= udptable->mask)
spin_unlock_bh(&udptable->hash[state->bucket].lock);
@@ -3295,7 +3282,7 @@ void udp_seq_stop(struct seq_file *seq, void *v)
struct udp_iter_state *state = seq->private;
struct udp_table *udptable;
- udptable = udp_get_table_seq(seq, seq_file_net(seq));
+ udptable = seq_file_net(seq)->ipv4.udp_table;
if (state->bucket <= udptable->mask)
spin_unlock_bh(&udptable->hash[state->bucket].lock);
@@ -3399,7 +3386,7 @@ static struct sock *bpf_iter_udp_batch(struct seq_file *seq)
if (iter->cur_sk == iter->end_sk)
state->bucket++;
- udptable = udp_get_table_seq(seq, net);
+ udptable = net->ipv4.udp_table;
again:
/* New batch for the next bucket.
@@ -3637,7 +3624,6 @@ static const struct seq_operations udp_seq_ops = {
static struct udp_seq_afinfo udp4_seq_afinfo = {
.family = AF_INET,
- .udp_table = NULL,
};
static int __net_init udp4_proc_init_net(struct net *net)
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index 5bddbf457b61..eeb77363a556 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -1872,7 +1872,6 @@ static const struct seq_operations udp6_seq_ops = {
static struct udp_seq_afinfo udp6_seq_afinfo = {
.family = AF_INET6,
- .udp_table = NULL,
};
int __net_init udp6_proc_init(struct net *net)