Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
authorDavid S. Miller <davem@davemloft.net>
Wed, 21 Jul 2010 01:25:24 +0000 (18:25 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 21 Jul 2010 01:25:24 +0000 (18:25 -0700)
Conflicts:
drivers/vhost/net.c
net/bridge/br_device.c

Fix merge conflict in drivers/vhost/net.c with guidance from
Stephen Rothwell.

Revert the effects of net-2.6 commit 573201f36fd9c7c6d5218cdcd9948cee700b277d
since net-next-2.6 has fixes that make bridge netpoll work properly thus
we don't need it disabled.

Signed-off-by: David S. Miller <davem@davemloft.net>
1  2 
drivers/net/r8169.c
drivers/net/wireless/rt2x00/rt2x00dev.c
drivers/vhost/net.c
include/net/sock.h
net/core/dev.c
net/ipv4/ipmr.c
net/ipv4/tcp.c
net/ipv4/tcp_output.c
net/sched/act_nat.c
net/xfrm/xfrm_policy.c

Simple merge
index 107af9e61dc1f237e2fb84fe8074f3a55917e033,2f6185c845e03618ca679513aecd55bfb96c76d5..7a104e2de3fa77d189bf9ae010cda3f0ee0dd706
@@@ -527,12 -527,15 +527,15 @@@ static long vhost_net_set_backend(struc
  
        /* start polling new socket */
        oldsock = vq->private_data;
-       if (sock != oldsock){
 -      if (sock == oldsock)
 -              goto done;
++      if (sock != oldsock) {
 +                vhost_net_disable_vq(n, vq);
 +                rcu_assign_pointer(vq->private_data, sock);
 +                vhost_net_enable_vq(n, vq);
 +      }
  
 -      vhost_net_disable_vq(n, vq);
 -      rcu_assign_pointer(vq->private_data, sock);
 -      vhost_net_enable_vq(n, vq);
+ done:
+       mutex_unlock(&vq->mutex);
        if (oldsock) {
                vhost_net_flush_vq(n, index);
                fput(oldsock->file);
Simple merge
diff --cc net/core/dev.c
index 9de75cdade563b6bc5652e108633baaf5500eb63,0ea10f849be862fff3219bc69ed4c5db0cbd9253..6e1b4370781cc433570a467822c6d7da66863aa2
@@@ -1910,26 -1911,18 +1910,34 @@@ static int dev_gso_segment(struct sk_bu
   */
  static inline void skb_orphan_try(struct sk_buff *skb)
  {
-       if (!skb_tx(skb)->flags)
+       struct sock *sk = skb->sk;
+       if (sk && !skb_tx(skb)->flags) {
+               /* skb_tx_hash() wont be able to get sk.
+                * We copy sk_hash into skb->rxhash
+                */
+               if (!skb->rxhash)
+                       skb->rxhash = sk->sk_hash;
                skb_orphan(skb);
+       }
  }
  
 +/*
 + * Returns true if either:
 + *    1. skb has frag_list and the device doesn't support FRAGLIST, or
 + *    2. skb is fragmented and the device does not support SG, or if
 + *       at least one of fragments is in highmem and device does not
 + *       support DMA from it.
 + */
 +static inline int skb_needs_linearize(struct sk_buff *skb,
 +                                    struct net_device *dev)
 +{
 +      return skb_is_nonlinear(skb) &&
 +             ((skb_has_frags(skb) && !(dev->features & NETIF_F_FRAGLIST)) ||
 +              (skb_shinfo(skb)->nr_frags && (!(dev->features & NETIF_F_SG) ||
 +                                            illegal_highdma(dev, skb))));
 +}
 +
  int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
                        struct netdev_queue *txq)
  {
diff --cc net/ipv4/ipmr.c
Simple merge
diff --cc net/ipv4/tcp.c
Simple merge
Simple merge
Simple merge
Simple merge