diff options
author | Tom Herbert <therbert@google.com> | 2014-06-14 23:24:20 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-06-15 01:00:49 -0700 |
commit | bbdff225ede6527f91184b2a7903df8aad803ace (patch) | |
tree | e174f88e8d58e5fc8c6b5f21faa6f0b654c25709 | |
parent | 46fb51eb96cafb2c148b7b5119adb5e31a2bf3c4 (diff) | |
download | linux-bbdff225ede6527f91184b2a7903df8aad803ace.tar.gz linux-bbdff225ede6527f91184b2a7903df8aad803ace.tar.bz2 linux-bbdff225ede6527f91184b2a7903df8aad803ace.zip |
udp: call __skb_checksum_complete when doing full checksum
In __udp_lib_checksum_complete check if checksum is being done over all
the data (len is equal to skb->len) and if it is call
__skb_checksum_complete instead of __skb_checksum_complete_head. This
allows checksum to be saved in checksum complete.
Signed-off-by: Tom Herbert <therbert@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | include/net/udp.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/include/net/udp.h b/include/net/udp.h index 2ecfc6e15609..68a1fefe3dfe 100644 --- a/include/net/udp.h +++ b/include/net/udp.h @@ -111,7 +111,9 @@ struct sk_buff; */ static inline __sum16 __udp_lib_checksum_complete(struct sk_buff *skb) { - return __skb_checksum_complete_head(skb, UDP_SKB_CB(skb)->cscov); + return (UDP_SKB_CB(skb)->cscov == skb->len ? + __skb_checksum_complete(skb) : + __skb_checksum_complete_head(skb, UDP_SKB_CB(skb)->cscov)); } static inline int udp_lib_checksum_complete(struct sk_buff *skb) |