Hi, On Mon, 2019-01-28 at 09:50 +0100, Steffen Klassert wrote: > diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c > index 584635db9231..c0be33216750 100644 > --- a/net/ipv4/udp_offload.c > +++ b/net/ipv4/udp_offload.c [...] > @@ -379,8 +397,17 @@ static struct sk_buff *udp_gro_receive_segment(struct > list_head *head, > * Under small packet flood GRO count could elsewhere grow a lot > * leading to execessive truesize values > */ > - if (!skb_gro_receive(p, skb) && > - NAPI_GRO_CB(p)->count >= UDP_GRO_CNT_MAX) > + if (NAPI_GRO_CB(skb)->is_flist) { > + if (!pskb_may_pull(skb, skb_gro_offset(skb))) > + return NULL; > + ret = skb_gro_receive_list(p, skb); > + } else { > + skb_gro_postpull_rcsum(skb, uh, sizeof(struct udphdr)); > + > + ret = skb_gro_receive(p, skb); > + } > + > + if (!ret && NAPI_GRO_CB(p)->count > UDP_GRO_CNT_MAX) ^^ Minor nitpick: here we may want to preserve the '>=' operator.
Note: I've not finished looking at the patches yet, I'll try to provide some benck-marking and it will take some time. Cheers, Paolo