|
@@ -533,6 +533,11 @@ int ip_do_fragment(struct net *net, struct sock *sk, struct sk_buff *skb,
|
|
|
|
|
|
dev = rt->dst.dev;
|
|
dev = rt->dst.dev;
|
|
|
|
|
|
|
|
+ /* for offloaded checksums cleanup checksum before fragmentation */
|
|
|
|
+ if (skb->ip_summed == CHECKSUM_PARTIAL &&
|
|
|
|
+ (err = skb_checksum_help(skb)))
|
|
|
|
+ goto fail;
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Point into the IP datagram header.
|
|
* Point into the IP datagram header.
|
|
*/
|
|
*/
|
|
@@ -657,9 +662,6 @@ slow_path_clean:
|
|
}
|
|
}
|
|
|
|
|
|
slow_path:
|
|
slow_path:
|
|
- /* for offloaded checksums cleanup checksum before fragmentation */
|
|
|
|
- if ((skb->ip_summed == CHECKSUM_PARTIAL) && skb_checksum_help(skb))
|
|
|
|
- goto fail;
|
|
|
|
iph = ip_hdr(skb);
|
|
iph = ip_hdr(skb);
|
|
|
|
|
|
left = skb->len - hlen; /* Space per frame */
|
|
left = skb->len - hlen; /* Space per frame */
|