diff options
author | Felix Fietkau <nbd@nbd.name> | 2024-05-02 10:44:46 +0200 |
---|---|---|
committer | Paolo Abeni <pabeni@redhat.com> | 2024-05-06 11:54:04 +0200 |
commit | 7516b27c555c1711ec17a5d891befb6986e573a3 (patch) | |
tree | 0de52e8a9cadd1a74e7cc1ed774154482d0f4139 /net/ipv6 | |
parent | net: create tcp_gro_lookup helper function (diff) | |
download | linux-7516b27c555c1711ec17a5d891befb6986e573a3.tar.xz linux-7516b27c555c1711ec17a5d891befb6986e573a3.zip |
net: create tcp_gro_header_pull helper function
Pull the code out of tcp_gro_receive in order to access the tcp header
from tcp4/6_gro_receive.
Acked-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Reviewed-by: David Ahern <dsahern@kernel.org>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/tcpv6_offload.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/net/ipv6/tcpv6_offload.c b/net/ipv6/tcpv6_offload.c index 575e2743e331..e73a4f74fd96 100644 --- a/net/ipv6/tcpv6_offload.c +++ b/net/ipv6/tcpv6_offload.c @@ -16,15 +16,23 @@ INDIRECT_CALLABLE_SCOPE struct sk_buff *tcp6_gro_receive(struct list_head *head, struct sk_buff *skb) { + struct tcphdr *th; + /* Don't bother verifying checksum if we're going to flush anyway. */ if (!NAPI_GRO_CB(skb)->flush && skb_gro_checksum_validate(skb, IPPROTO_TCP, - ip6_gro_compute_pseudo)) { - NAPI_GRO_CB(skb)->flush = 1; - return NULL; - } + ip6_gro_compute_pseudo)) + goto flush; + + th = tcp_gro_pull_header(skb); + if (!th) + goto flush; + + return tcp_gro_receive(head, skb, th); - return tcp_gro_receive(head, skb); +flush: + NAPI_GRO_CB(skb)->flush = 1; + return NULL; } INDIRECT_CALLABLE_SCOPE int tcp6_gro_complete(struct sk_buff *skb, int thoff) |