diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2010-06-28 22:33:13 +0200 | 
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2010-06-28 22:33:24 +0200 | 
| commit | f384c954c9fe3d3c6fce5ae66b67f2ddd947d098 (patch) | |
| tree | a38541b8083a2304435e9a153d408bd7cd44116e /net/ipv4/ip_output.c | |
| parent | 9a15a07fe2175dc25cd928a354b3839f562ac8cc (diff) | |
| parent | 5904b3b81d25166e5e39b9727645bb47937618e3 (diff) | |
| download | olio-linux-3.10-f384c954c9fe3d3c6fce5ae66b67f2ddd947d098.tar.xz olio-linux-3.10-f384c954c9fe3d3c6fce5ae66b67f2ddd947d098.zip  | |
Merge branch 'linus' into perf/core
Reason: Further changes conflict with upstream fixes
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'net/ipv4/ip_output.c')
| -rw-r--r-- | net/ipv4/ip_output.c | 9 | 
1 files changed, 6 insertions, 3 deletions
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 9a4a6c96cb0..041d41df122 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c @@ -873,8 +873,10 @@ int ip_append_data(struct sock *sk,  	    !exthdrlen)  		csummode = CHECKSUM_PARTIAL; +	skb = skb_peek_tail(&sk->sk_write_queue); +  	inet->cork.length += length; -	if (((length> mtu) || !skb_queue_empty(&sk->sk_write_queue)) && +	if (((length > mtu) || (skb && skb_is_gso(skb))) &&  	    (sk->sk_protocol == IPPROTO_UDP) &&  	    (rt->u.dst.dev->features & NETIF_F_UFO)) {  		err = ip_ufo_append_data(sk, getfrag, from, length, hh_len, @@ -892,7 +894,7 @@ int ip_append_data(struct sock *sk,  	 * adding appropriate IP header.  	 */ -	if ((skb = skb_peek_tail(&sk->sk_write_queue)) == NULL) +	if (!skb)  		goto alloc_new_skb;  	while (length > 0) { @@ -1121,7 +1123,8 @@ ssize_t	ip_append_page(struct sock *sk, struct page *page,  		return -EINVAL;  	inet->cork.length += size; -	if ((sk->sk_protocol == IPPROTO_UDP) && +	if ((size + skb->len > mtu) && +	    (sk->sk_protocol == IPPROTO_UDP) &&  	    (rt->u.dst.dev->features & NETIF_F_UFO)) {  		skb_shinfo(skb)->gso_size = mtu - fragheaderlen;  		skb_shinfo(skb)->gso_type = SKB_GSO_UDP;  |