summary refs log tree commit diff
path: root/net/ipv4/gre_offload.c
diff options
context:
space:
mode:
authorTom Herbert <therbert@google.com>2014-08-31 15:12:44 -0700
committerDavid S. Miller <davem@davemloft.net>2014-09-01 21:36:28 -0700
commit884d338c041c2aa4536ade8620efa585e7c57f3c (patch)
tree32c9366b0be384255f9f8a27b1a56d902b0f496e /net/ipv4/gre_offload.c
parent2abb7cdc0dc84e99b76ef983a1ae1978922aa9b3 (diff)
downloadlinux-884d338c041c2aa4536ade8620efa585e7c57f3c.tar.gz
gre: Add support for checksum unnecessary conversions
Call skb_checksum_try_convert and skb_gro_checksum_try_convert
after checksum is found present and validated in the GRE header
for normal and GRO paths respectively.

In GRO path, call skb_gro_checksum_try_convert

Signed-off-by: Tom Herbert <therbert@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/gre_offload.c')
-rw-r--r--net/ipv4/gre_offload.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/net/ipv4/gre_offload.c b/net/ipv4/gre_offload.c
index a4d7965fb880..d3fe2ac05167 100644
--- a/net/ipv4/gre_offload.c
+++ b/net/ipv4/gre_offload.c
@@ -172,10 +172,14 @@ static struct sk_buff **gre_gro_receive(struct sk_buff **head,
 	}
 
 	/* Don't bother verifying checksum if we're going to flush anyway. */
-	if ((greh->flags & GRE_CSUM) && !NAPI_GRO_CB(skb)->flush &&
-	    skb_gro_checksum_simple_validate(skb))
+	if ((greh->flags & GRE_CSUM) && !NAPI_GRO_CB(skb)->flush) {
+		if (skb_gro_checksum_simple_validate(skb))
 			goto out_unlock;
 
+		skb_gro_checksum_try_convert(skb, IPPROTO_GRE, 0,
+					     null_compute_pseudo);
+	}
+
 	flush = 0;
 
 	for (p = *head; p; p = p->next) {