On Mon, Sep 17, 2018 at 5:03 AM Steffen Klassert <steffen.klass...@secunet.com> wrote: > > On Fri, Sep 14, 2018 at 01:59:40PM -0400, Willem de Bruijn wrote: > > From: Willem de Bruijn <will...@google.com> > > > > Avoid the socket lookup cost in udp_gro_receive if no socket has a > > gro callback configured. > > > > Signed-off-by: Willem de Bruijn <will...@google.com> > > ... > > > diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c > > index 4f6aa95a9b12..f44fe328aa0f 100644 > > --- a/net/ipv4/udp_offload.c > > +++ b/net/ipv4/udp_offload.c > > @@ -405,7 +405,7 @@ static struct sk_buff *udp4_gro_receive(struct > > list_head *head, > > { > > struct udphdr *uh = udp_gro_udphdr(skb); > > > > - if (unlikely(!uh)) > > + if (unlikely(!uh) || !static_branch_unlikely(&udp_encap_needed_key)) > > goto flush; > > If you use udp_encap_needed_key to enalbe UDP GRO, then a UDP > encapsulation socket will enable it too. Not sure if this is > intentional.
Yes. That is already the case to a certain point. The function was introduced with tunnels and is enabled by tunnels, but so far only compiles out the encap_rcv() branch in udp_qeueue_rcv_skb. With patch 7/8 it also toggles the GRO path. Critically, both are enabled as soon as a tunnel is registered. > > That said, enabling UDP GRO on a UDP encapsulation socket > (ESP in UPD etc.) will fail badly as then encrypted ESP > packets might be merged together. So we somehow should > make sure that this does not happen. Absolutely. This initial implementation probably breaks UDP tunnels badly. That needs to be addressed. > > Anyway, this reminds me that we can support GRO for > UDP encapsulation. It just requires separate GRO > callbacks for the different encapsulation types.