diff options
Diffstat (limited to 'net/ipv4/ip_output.c')
| -rw-r--r-- | net/ipv4/ip_output.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index a04d872c54f9..3982eabf61e1 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
| @@ -772,15 +772,20 @@ static inline int ip_ufo_append_data(struct sock *sk, | |||
| 772 | /* initialize protocol header pointer */ | 772 | /* initialize protocol header pointer */ |
| 773 | skb->transport_header = skb->network_header + fragheaderlen; | 773 | skb->transport_header = skb->network_header + fragheaderlen; |
| 774 | 774 | ||
| 775 | skb->ip_summed = CHECKSUM_PARTIAL; | ||
| 776 | skb->csum = 0; | 775 | skb->csum = 0; |
| 777 | 776 | ||
| 778 | /* specify the length of each IP datagram fragment */ | 777 | |
| 779 | skb_shinfo(skb)->gso_size = maxfraglen - fragheaderlen; | ||
| 780 | skb_shinfo(skb)->gso_type = SKB_GSO_UDP; | ||
| 781 | __skb_queue_tail(queue, skb); | 778 | __skb_queue_tail(queue, skb); |
| 779 | } else if (skb_is_gso(skb)) { | ||
| 780 | goto append; | ||
| 782 | } | 781 | } |
| 783 | 782 | ||
| 783 | skb->ip_summed = CHECKSUM_PARTIAL; | ||
| 784 | /* specify the length of each IP datagram fragment */ | ||
| 785 | skb_shinfo(skb)->gso_size = maxfraglen - fragheaderlen; | ||
| 786 | skb_shinfo(skb)->gso_type = SKB_GSO_UDP; | ||
| 787 | |||
| 788 | append: | ||
| 784 | return skb_append_datato_frags(sk, skb, getfrag, from, | 789 | return skb_append_datato_frags(sk, skb, getfrag, from, |
| 785 | (length - transhdrlen)); | 790 | (length - transhdrlen)); |
| 786 | } | 791 | } |
