Loading net/ipv4/udp.c +5 −4 Original line number Original line Diff line number Diff line Loading @@ -727,13 +727,12 @@ EXPORT_SYMBOL(udp_flush_pending_frames); void udp4_hwcsum(struct sk_buff *skb, __be32 src, __be32 dst) void udp4_hwcsum(struct sk_buff *skb, __be32 src, __be32 dst) { { struct udphdr *uh = udp_hdr(skb); struct udphdr *uh = udp_hdr(skb); struct sk_buff *frags = skb_shinfo(skb)->frag_list; int offset = skb_transport_offset(skb); int offset = skb_transport_offset(skb); int len = skb->len - offset; int len = skb->len - offset; int hlen = len; int hlen = len; __wsum csum = 0; __wsum csum = 0; if (!frags) { if (!skb_has_frag_list(skb)) { /* /* * Only one fragment on the socket. * Only one fragment on the socket. */ */ Loading @@ -742,15 +741,17 @@ void udp4_hwcsum(struct sk_buff *skb, __be32 src, __be32 dst) uh->check = ~csum_tcpudp_magic(src, dst, len, uh->check = ~csum_tcpudp_magic(src, dst, len, IPPROTO_UDP, 0); IPPROTO_UDP, 0); } else { } else { struct sk_buff *frags; /* /* * HW-checksum won't work as there are two or more * HW-checksum won't work as there are two or more * fragments on the socket so that all csums of sk_buffs * fragments on the socket so that all csums of sk_buffs * should be together * should be together */ */ do { skb_walk_frags(skb, frags) { csum = csum_add(csum, frags->csum); csum = csum_add(csum, frags->csum); hlen -= frags->len; hlen -= frags->len; } while ((frags = frags->next)); } csum = skb_checksum(skb, offset, hlen, csum); csum = skb_checksum(skb, offset, hlen, csum); skb->ip_summed = CHECKSUM_NONE; skb->ip_summed = CHECKSUM_NONE; Loading Loading
net/ipv4/udp.c +5 −4 Original line number Original line Diff line number Diff line Loading @@ -727,13 +727,12 @@ EXPORT_SYMBOL(udp_flush_pending_frames); void udp4_hwcsum(struct sk_buff *skb, __be32 src, __be32 dst) void udp4_hwcsum(struct sk_buff *skb, __be32 src, __be32 dst) { { struct udphdr *uh = udp_hdr(skb); struct udphdr *uh = udp_hdr(skb); struct sk_buff *frags = skb_shinfo(skb)->frag_list; int offset = skb_transport_offset(skb); int offset = skb_transport_offset(skb); int len = skb->len - offset; int len = skb->len - offset; int hlen = len; int hlen = len; __wsum csum = 0; __wsum csum = 0; if (!frags) { if (!skb_has_frag_list(skb)) { /* /* * Only one fragment on the socket. * Only one fragment on the socket. */ */ Loading @@ -742,15 +741,17 @@ void udp4_hwcsum(struct sk_buff *skb, __be32 src, __be32 dst) uh->check = ~csum_tcpudp_magic(src, dst, len, uh->check = ~csum_tcpudp_magic(src, dst, len, IPPROTO_UDP, 0); IPPROTO_UDP, 0); } else { } else { struct sk_buff *frags; /* /* * HW-checksum won't work as there are two or more * HW-checksum won't work as there are two or more * fragments on the socket so that all csums of sk_buffs * fragments on the socket so that all csums of sk_buffs * should be together * should be together */ */ do { skb_walk_frags(skb, frags) { csum = csum_add(csum, frags->csum); csum = csum_add(csum, frags->csum); hlen -= frags->len; hlen -= frags->len; } while ((frags = frags->next)); } csum = skb_checksum(skb, offset, hlen, csum); csum = skb_checksum(skb, offset, hlen, csum); skb->ip_summed = CHECKSUM_NONE; skb->ip_summed = CHECKSUM_NONE; Loading