Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
David S. Miller [Thu, 24 Jun 2010 01:26:27 +0000 (18:26 -0700)]
Conflicts:
net/ipv4/ip_output.c

1  2 
drivers/net/Kconfig
drivers/net/bnx2.c
drivers/net/cnic.c
drivers/net/gianfar.c
drivers/net/ucc_geth.c
drivers/net/usb/hso.c
drivers/net/wireless/ath/ath5k/attach.c
net/bridge/br_fdb.c
net/bridge/br_forward.c
net/ipv4/ip_output.c

Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -873,10 -873,12 +873,12 @@@ 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)) {
 +          (rt->dst.dev->features & NETIF_F_UFO)) {
                err = ip_ufo_append_data(sk, getfrag, from, length, hh_len,
                                         fragheaderlen, transhdrlen, mtu,
                                         flags);
@@@ -1121,8 -1123,9 +1123,9 @@@ ssize_t ip_append_page(struct sock *sk
                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)) {
 +          (rt->dst.dev->features & NETIF_F_UFO)) {
                skb_shinfo(skb)->gso_size = mtu - fragheaderlen;
                skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
        }