]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - net/ipv4/tcp_offload.c
net: Store checksum result for offloaded GSO checksums
[mirror_ubuntu-artful-kernel.git] / net / ipv4 / tcp_offload.c
index 9864a2dbadce8457bc0c78fa13475cab6c19ec6b..773083b7f1e98906f5cdc93f770829f293fea205 100644 (file)
@@ -135,7 +135,9 @@ struct sk_buff *tcp_gso_segment(struct sk_buff *skb,
                th->fin = th->psh = 0;
                th->check = newcheck;
 
-               if (skb->ip_summed != CHECKSUM_PARTIAL)
+               if (skb->ip_summed == CHECKSUM_PARTIAL)
+                       gso_reset_checksum(skb, ~th->check);
+               else
                        th->check = gso_make_checksum(skb, ~th->check);
 
                seq += mss;
@@ -169,7 +171,9 @@ struct sk_buff *tcp_gso_segment(struct sk_buff *skb,
                      skb->data_len);
        th->check = ~csum_fold((__force __wsum)((__force u32)th->check +
                                (__force u32)delta));
-       if (skb->ip_summed != CHECKSUM_PARTIAL)
+       if (skb->ip_summed == CHECKSUM_PARTIAL)
+               gso_reset_checksum(skb, ~th->check);
+       else
                th->check = gso_make_checksum(skb, ~th->check);
 out:
        return segs;