> On Jan 12, 2024, at 11:05 AM, Martin KaFai Lau <martin.lau@xxxxxxxxx> wrote: > > From: Martin KaFai Lau <martin.lau@xxxxxxxxxx> > > The current logic is to use a default size 16 to batch the whole bucket. > If it is too small, it will retry with a larger batch size. > > The current code accidentally does a state->bucket-- before retrying. > This goes back to retry with the previous bucket which has already > been done. This patch fixed it. > > It is hard to create a selftest. I added a WARN_ON(state->bucket < 0), > forced a particular port to be hashed to the first bucket, > created >16 sockets, and observed the for-loop went back > to the "-1" bucket. > > Cc: Aditi Ghag <aditi.ghag@xxxxxxxxxxxxx> > Fixes: c96dac8d369f ("bpf: udp: Implement batching for sockets iterator") > Acked-by: Yonghong Song <yonghong.song@xxxxxxxxx> > Signed-off-by: Martin KaFai Lau <martin.lau@xxxxxxxxxx> Reviewed-by: Aditi Ghag <aditi.ghag@xxxxxxxxxxxxx> LGTM! > --- > net/ipv4/udp.c | 1 - > 1 file changed, 1 deletion(-) > > diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c > index 89e5a806b82e..978b83d3c094 100644 > --- a/net/ipv4/udp.c > +++ b/net/ipv4/udp.c > @@ -3213,7 +3213,6 @@ static struct sock *bpf_iter_udp_batch(struct seq_file *seq) > /* After allocating a larger batch, retry one more time to grab > * the whole bucket. > */ > - state->bucket--; > goto again; > } > done: > -- > 2.34.1 >