diff options
Diffstat (limited to 'net/ipv4/tcp_offload.c')
-rw-r--r-- | net/ipv4/tcp_offload.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/net/ipv4/tcp_offload.c b/net/ipv4/tcp_offload.c index a2b68a108eae..55aeec930140 100644 --- a/net/ipv4/tcp_offload.c +++ b/net/ipv4/tcp_offload.c | |||
@@ -276,6 +276,10 @@ static struct sk_buff **tcp4_gro_receive(struct sk_buff **head, struct sk_buff * | |||
276 | __wsum wsum; | 276 | __wsum wsum; |
277 | __sum16 sum; | 277 | __sum16 sum; |
278 | 278 | ||
279 | /* Don't bother verifying checksum if we're going to flush anyway. */ | ||
280 | if (NAPI_GRO_CB(skb)->flush) | ||
281 | goto skip_csum; | ||
282 | |||
279 | switch (skb->ip_summed) { | 283 | switch (skb->ip_summed) { |
280 | case CHECKSUM_COMPLETE: | 284 | case CHECKSUM_COMPLETE: |
281 | if (!tcp_v4_check(skb_gro_len(skb), iph->saddr, iph->daddr, | 285 | if (!tcp_v4_check(skb_gro_len(skb), iph->saddr, iph->daddr, |
@@ -301,6 +305,7 @@ flush: | |||
301 | break; | 305 | break; |
302 | } | 306 | } |
303 | 307 | ||
308 | skip_csum: | ||
304 | return tcp_gro_receive(head, skb); | 309 | return tcp_gro_receive(head, skb); |
305 | } | 310 | } |
306 | 311 | ||