Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
authorDavid S. Miller <davem@davemloft.net>
Mon, 2 Mar 2009 05:35:16 +0000 (21:35 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 2 Mar 2009 05:35:16 +0000 (21:35 -0800)
Conflicts:
drivers/net/wireless/iwlwifi/iwl-tx.c
net/8021q/vlan_core.c
net/core/dev.c

1  2 
drivers/net/b44.c
drivers/net/gianfar.c
drivers/net/r8169.c
drivers/net/wireless/libertas/main.c
drivers/net/wireless/libertas/scan.c
fs/compat_ioctl.c
net/8021q/vlan_core.c
net/core/dev.c

Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 70435af153f24c56b6dba620a0b44852e2580ad9,2886d2fb9ab5d84dc8177a01778606a82904d6b5..2d6e405fc4981cf0189836ce3a163833269a2e8b
@@@ -100,9 -102,25 +104,12 @@@ drop
  int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp,
                     unsigned int vlan_tci, struct sk_buff *skb)
  {
 -      int err = NET_RX_SUCCESS;
 +      skb_gro_reset_offset(skb);
  
 -      switch (vlan_gro_common(napi, grp, vlan_tci, skb)) {
 -      case -1:
 -              return netif_receive_skb(skb);
 -
 -      case 2:
 -              err = NET_RX_DROP;
 -              /* fall through */
 -
 -      case 1:
 -              kfree_skb(skb);
 -              break;
 -      }
 -
 -      return err;
+       if (netpoll_receive_skb(skb))
+               return NET_RX_DROP;
 +      return napi_skb_finish(vlan_gro_common(napi, grp, vlan_tci, skb), skb);
  }
  EXPORT_SYMBOL(vlan_gro_receive);
  
@@@ -110,11 -128,30 +117,14 @@@ int vlan_gro_frags(struct napi_struct *
                   unsigned int vlan_tci, struct napi_gro_fraginfo *info)
  {
        struct sk_buff *skb = napi_fraginfo_skb(napi, info);
 -      int err = NET_RX_DROP;
  
        if (!skb)
 -              goto out;
 +              return NET_RX_DROP;
  
 -              goto out;
 -
 -      err = NET_RX_SUCCESS;
 -
 -      switch (vlan_gro_common(napi, grp, vlan_tci, skb)) {
 -      case -1:
 -              return netif_receive_skb(skb);
 -
 -      case 2:
 -              err = NET_RX_DROP;
 -              /* fall through */
 -
 -      case 1:
 -              napi_reuse_skb(napi, skb);
 -              break;
 -      }
+       if (netpoll_receive_skb(skb))
 -out:
 -      return err;
++              return NET_RX_DROP;
 +      return napi_frags_finish(napi, skb,
 +                               vlan_gro_common(napi, grp, vlan_tci, skb));
  }
  EXPORT_SYMBOL(vlan_gro_frags);
diff --cc net/core/dev.c
index ac6ab12d3297a11ed0a78d41bf4ab14a5ca7cfc3,72b0d26fd46d037e9a4016a810e06d940df5431a..bcd0c2154bb2ebea8336a47b7989e97a051bc63c
@@@ -2483,19 -2486,16 +2483,22 @@@ static int __napi_gro_receive(struct na
        return dev_gro_receive(napi, skb);
  }
  
 -int napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
 +int napi_skb_finish(int ret, struct sk_buff *skb)
  {
 -      switch (__napi_gro_receive(napi, skb)) {
 -      case -1:
 +      int err = NET_RX_SUCCESS;
 +
+       if (netpoll_receive_skb(skb))
+               return NET_RX_DROP;
 +      switch (ret) {
 +      case GRO_NORMAL:
                return netif_receive_skb(skb);
  
 -      case 1:
 +      case GRO_DROP:
 +              err = NET_RX_DROP;
 +              /* fall through */
 +
 +      case GRO_MERGED_FREE:
                kfree_skb(skb);
                break;
        }
  }
  EXPORT_SYMBOL(napi_fraginfo_skb);
  
 -int napi_gro_frags(struct napi_struct *napi, struct napi_gro_fraginfo *info)
 +int napi_frags_finish(struct napi_struct *napi, struct sk_buff *skb, int ret)
  {
 -      struct sk_buff *skb = napi_fraginfo_skb(napi, info);
 -      int err = NET_RX_DROP;
 -
 -      if (!skb)
 -              goto out;
 +      int err = NET_RX_SUCCESS;
  
 -              goto out;
+       if (netpoll_receive_skb(skb))
 -      err = NET_RX_SUCCESS;
++              return NET_RX_DROP;
 +      switch (ret) {
 +      case GRO_NORMAL:
 +      case GRO_HELD:
 +              skb->protocol = eth_type_trans(skb, napi->dev);
  
 -      switch (__napi_gro_receive(napi, skb)) {
 -      case -1:
 -              return netif_receive_skb(skb);
 +              if (ret == GRO_NORMAL)
 +                      return netif_receive_skb(skb);
  
 -      case 0:
 -              goto out;
 -      }
 +              skb_gro_pull(skb, -ETH_HLEN);
 +              break;
  
 -      napi_reuse_skb(napi, skb);
 +      case GRO_DROP:
 +              err = NET_RX_DROP;
 +              /* fall through */
 +
 +      case GRO_MERGED_FREE:
 +              napi_reuse_skb(napi, skb);
 +              break;
 +      }
  
 -out:
        return err;
  }
 +EXPORT_SYMBOL(napi_frags_finish);
 +
 +int napi_gro_frags(struct napi_struct *napi, struct napi_gro_fraginfo *info)
 +{
 +      struct sk_buff *skb = napi_fraginfo_skb(napi, info);
 +
 +      if (!skb)
 +              return NET_RX_DROP;
 +
 +      return napi_frags_finish(napi, skb, __napi_gro_receive(napi, skb));
 +}
  EXPORT_SYMBOL(napi_gro_frags);
  
  static int process_backlog(struct napi_struct *napi, int quota)