diff options
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/gre_offload.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/ipv4/gre_offload.c b/net/ipv4/gre_offload.c index 24deb3928b9e..eb92deb12666 100644 --- a/net/ipv4/gre_offload.c +++ b/net/ipv4/gre_offload.c | |||
@@ -131,10 +131,12 @@ static __sum16 gro_skb_checksum(struct sk_buff *skb) | |||
131 | csum_partial(skb->data, skb_gro_offset(skb), 0)); | 131 | csum_partial(skb->data, skb_gro_offset(skb), 0)); |
132 | sum = csum_fold(NAPI_GRO_CB(skb)->csum); | 132 | sum = csum_fold(NAPI_GRO_CB(skb)->csum); |
133 | if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE)) { | 133 | if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE)) { |
134 | if (unlikely(!sum)) | 134 | if (unlikely(!sum) && !skb->csum_complete_sw) |
135 | netdev_rx_csum_fault(skb->dev); | 135 | netdev_rx_csum_fault(skb->dev); |
136 | } else | 136 | } else { |
137 | skb->ip_summed = CHECKSUM_COMPLETE; | 137 | skb->ip_summed = CHECKSUM_COMPLETE; |
138 | skb->csum_complete_sw = 1; | ||
139 | } | ||
138 | 140 | ||
139 | return sum; | 141 | return sum; |
140 | } | 142 | } |