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>
This commit is contained in:
Kuniyuki Iwashima 2026-03-11 05:19:58 +00:00 committed by Jakub Kicinski
parent 5c27385886
commit c570bd25d8
3 changed files with 4 additions and 20 deletions

View File

@ -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 {

View File

@ -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)

View File

@ -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)