Skip to content

Commit 49ba689

Browse files
jrifeKernel Patches Daemon
authored and
Kernel Patches Daemon
committed
bpf: udp: Get rid of st_bucket_done
Get rid of the st_bucket_done field to simplify UDP iterator state and logic. Before, st_bucket_done could be false if bpf_iter_udp_batch returned a partial batch; however, with the last patch ("bpf: udp: Make sure iter->batch always contains a full bucket snapshot"), st_bucket_done == true is equivalent to iter->cur_sk == iter->end_sk. Signed-off-by: Jordan Rife <[email protected]>
1 parent 58468ad commit 49ba689

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

net/ipv4/udp.c

+8-8
Original file line numberDiff line numberDiff line change
@@ -3397,7 +3397,6 @@ struct bpf_udp_iter_state {
33973397
unsigned int max_sk;
33983398
int offset;
33993399
struct sock **batch;
3400-
bool st_bucket_done;
34013400
};
34023401

34033402
static int bpf_iter_udp_realloc_batch(struct bpf_udp_iter_state *iter,
@@ -3418,7 +3417,7 @@ static struct sock *bpf_iter_udp_batch(struct seq_file *seq)
34183417
resume_offset = iter->offset;
34193418

34203419
/* The current batch is done, so advance the bucket. */
3421-
if (iter->st_bucket_done)
3420+
if (iter->cur_sk == iter->end_sk)
34223421
state->bucket++;
34233422

34243423
udptable = udp_get_table_seq(seq, net);
@@ -3433,7 +3432,6 @@ static struct sock *bpf_iter_udp_batch(struct seq_file *seq)
34333432
*/
34343433
iter->cur_sk = 0;
34353434
iter->end_sk = 0;
3436-
iter->st_bucket_done = true;
34373435
batch_sks = 0;
34383436

34393437
for (; state->bucket <= udptable->mask; state->bucket++) {
@@ -3596,8 +3594,10 @@ static int bpf_iter_udp_seq_show(struct seq_file *seq, void *v)
35963594

35973595
static void bpf_iter_udp_put_batch(struct bpf_udp_iter_state *iter)
35983596
{
3599-
while (iter->cur_sk < iter->end_sk)
3600-
sock_put(iter->batch[iter->cur_sk++]);
3597+
unsigned int cur_sk = iter->cur_sk;
3598+
3599+
while (cur_sk < iter->end_sk)
3600+
sock_put(iter->batch[cur_sk++]);
36013601
}
36023602

36033603
static void bpf_iter_udp_seq_stop(struct seq_file *seq, void *v)
@@ -3613,10 +3613,8 @@ static void bpf_iter_udp_seq_stop(struct seq_file *seq, void *v)
36133613
(void)udp_prog_seq_show(prog, &meta, v, 0, 0);
36143614
}
36153615

3616-
if (iter->cur_sk < iter->end_sk) {
3616+
if (iter->cur_sk < iter->end_sk)
36173617
bpf_iter_udp_put_batch(iter);
3618-
iter->st_bucket_done = false;
3619-
}
36203618
}
36213619

36223620
static const struct seq_operations bpf_iter_udp_seq_ops = {
@@ -3893,6 +3891,8 @@ static int bpf_iter_init_udp(void *priv_data, struct bpf_iter_aux_info *aux)
38933891
if (ret)
38943892
bpf_iter_fini_seq_net(priv_data);
38953893

3894+
iter->state.bucket = -1;
3895+
38963896
return ret;
38973897
}
38983898

0 commit comments

Comments
 (0)