diff options
author | Paolo Abeni <pabeni@redhat.com> | 2021-07-28 18:24:03 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2021-07-29 12:18:12 +0100 |
commit | 5e10da5385d20c4bae587bc2921e5fdd9655d5fc (patch) | |
tree | b199e9c7b0e962d363ed6a4d06d6521af76018d9 /include/net/sock.h | |
parent | 9efb4b5baf6ce851b247288992b0632cb4d31c17 (diff) | |
download | linux-stable-5e10da5385d20c4bae587bc2921e5fdd9655d5fc.tar.gz linux-stable-5e10da5385d20c4bae587bc2921e5fdd9655d5fc.tar.bz2 linux-stable-5e10da5385d20c4bae587bc2921e5fdd9655d5fc.zip |
skbuff: allow 'slow_gro' for skb carring sock reference
This change leverages the infrastructure introduced by the previous
patches to allow soft devices passing to the GRO engine owned skbs
without impacting the fast-path.
It's up to the GRO caller ensuring the slow_gro bit validity before
invoking the GRO engine. The new helper skb_prepare_for_gro() is
introduced for that goal.
On slow_gro, skbs are aggregated only with equal sk.
Additionally, skb truesize on GRO recycle and free is correctly
updated so that sk wmem is not changed by the GRO processing.
rfc-> v1:
- fixed bad truesize on dev_gro_receive NAPI_FREE
- use the existing state bit
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/sock.h')
-rw-r--r-- | include/net/sock.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/include/net/sock.h b/include/net/sock.h index f23cb259b0e2..ff1be7e7e90b 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -2249,6 +2249,15 @@ static inline __must_check bool skb_set_owner_sk_safe(struct sk_buff *skb, struc return false; } +static inline void skb_prepare_for_gro(struct sk_buff *skb) +{ + if (skb->destructor != sock_wfree) { + skb_orphan(skb); + return; + } + skb->slow_gro = 1; +} + void sk_reset_timer(struct sock *sk, struct timer_list *timer, unsigned long expires); |