1. 29 5月, 2009 1 次提交
    • J
      bonding: allow bond in mode balance-alb to work properly in bridge -try4.3 · 5d4e039b
      Jiri Pirko 提交于
      [PATCH net-next] bonding: allow bond in mode balance-alb to work properly in bridge -try4.3
      
      (updated)
      changes v4.2 -> v4.3
      - memcpy the address always, not just in case it differs from master->dev_addr
      - compare_ether_addr_64bits() is not used so there is no direct need to make new
        header file (I think it would be good to have bond stuff in separate file
        anyway).
      
      changes v4.1 -> v4.2
      - use skb->pkt_type == PACKET_HOST compare rather then comparing skb dest addr
        against skb->dev->dev_addr
      
      The problem is described in following bugzilla:
      https://bugzilla.redhat.com/show_bug.cgi?id=487763
      
      Basically here's what's going on. In every mode, bonding interface uses the same
      mac address for all enslaved devices (except fail_over_mac). Only balance-alb
      will simultaneously use multiple MAC addresses across different slaves. When you
      put this kind of bond device into a bridge it will only add one of mac adresses
      into a hash list of mac addresses, say X. This mac address is marked as local.
      But this bonding interface also has mac address Y. Now then packet arrives with
      destination address Y, this address is not marked as local and the packed looks
      like it needs to be forwarded. This packet is then lost which is wrong.
      
      Notice that interfaces can be added and removed from bond while it is in bridge.
      
      ***
      When the multiple addresses for bridge port approach failed to solve this issue
      due to STP I started to think other way to solve this. I returned to previous
      solution but tweaked one.
      
      This patch solves the situation in the bonding without touching bridge code.
      For every incoming frame to bonding the destination address is compared to
      current address of the slave device from which tha packet came. If these two
      match destination address is replaced by mac address of the master. This address
      is known by bridge so it is delivered properly. Note that the comparsion is not
      made directly, it's used skb->pkt_type == PACKET_HOST instead. This is "set"
      previously in eth_type_trans().
      
      I experimentally tried that this works as good as searching through the slave
      list (v4 of this patch).
      
      Jirka
      Signed-off-by: NJiri Pirko <jpirko@redhat.com>
      Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NAndy Gospodarek <andy@greyhouse.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5d4e039b
  2. 28 5月, 2009 2 次提交
  3. 27 5月, 2009 4 次提交
  4. 26 5月, 2009 1 次提交
    • E
      net: txq_trans_update() helper · 08baf561
      Eric Dumazet 提交于
      We would like to get rid of netdev->trans_start = jiffies; that about all net
      drivers have to use in their start_xmit() function, and use txq->trans_start
      instead.
      
      This can be done generically in core network, as suggested by David.
      
      Some devices, (particularly loopback) dont need trans_start update, because
      they dont have transmit watchdog. We could add a new device flag, or rely
      on fact that txq->tran_start can be updated is txq->xmit_lock_owner is
      different than -1. Use a helper function to hide our choice.
      Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      08baf561
  5. 25 5月, 2009 1 次提交
  6. 19 5月, 2009 1 次提交
    • E
      net: add tx_packets/tx_bytes/tx_dropped counters in struct netdev_queue · 7004bf25
      Eric Dumazet 提交于
      offsetof(struct net_device, features)=0x44
      offsetof(struct net_device, stats.tx_packets)=0x54
      offsetof(struct net_device, stats.tx_bytes)=0x5c
      offsetof(struct net_device, stats.tx_dropped)=0x6c
      
      Network drivers that touch dev->stats.tx_packets/stats.tx_bytes in their
      tx path can slow down SMP operations, since they dirty a cache line
      that should stay shared (dev->features is needed in rx and tx paths)
      
      We could move away stats field in net_device but it wont help that much.
      (Two cache lines dirtied in tx path, we can do one only)
      
      Better solution is to add tx_packets/tx_bytes/tx_dropped in struct
      netdev_queue because this structure is already touched in tx path and
      counters updates will then be free (no increase in size)
      Signed-off-by: NEric Dumazet <dada1@cosmosbay.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      7004bf25
  7. 18 5月, 2009 1 次提交
    • E
      net: tx scalability works : trans_start · 9d21493b
      Eric Dumazet 提交于
      struct net_device trans_start field is a hot spot on SMP and high performance
      devices, particularly multi queues ones, because every transmitter dirties
      it. Is main use is tx watchdog and bonding alive checks.
      
      But as most devices dont use NETIF_F_LLTX, we have to lock
      a netdev_queue before calling their ndo_start_xmit(). So it makes
      sense to move trans_start from net_device to netdev_queue. Its update
      will occur on a already present (and in exclusive state) cache line, for
      free.
      
      We can do this transition smoothly. An old driver continue to
      update dev->trans_start, while an updated one updates txq->trans_start.
      
      Further patches could also put tx_bytes/tx_packets counters in 
      netdev_queue to avoid dirtying dev->stats (vlan device comes to mind)
      Signed-off-by: NEric Dumazet <dada1@cosmosbay.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9d21493b
  8. 07 5月, 2009 1 次提交
  9. 06 5月, 2009 1 次提交
    • J
      net: introduce a list of device addresses dev_addr_list (v6) · f001fde5
      Jiri Pirko 提交于
      v5 -> v6 (current):
      -removed so far unused static functions
      -corrected dev_addr_del_multiple to call del instead of add
      
      v4 -> v5:
      -added device address type (suggested by davem)
      -removed refcounting (better to have simplier code then safe potentially few
       bytes)
      
      v3 -> v4:
      -changed kzalloc to kmalloc in __hw_addr_add_ii()
      -ASSERT_RTNL() avoided in dev_addr_flush() and dev_addr_init()
      
      v2 -> v3:
      -removed unnecessary rcu read locking
      -moved dev_addr_flush() calling to ensure no null dereference of dev_addr
      
      v1 -> v2:
      -added forgotten ASSERT_RTNL to dev_addr_init and dev_addr_flush
      -removed unnecessary rcu_read locking in dev_addr_init
      -use compare_ether_addr_64bits instead of compare_ether_addr
      -use L1_CACHE_BYTES as size for allocating struct netdev_hw_addr
      -use call_rcu instead of rcu_synchronize
      -moved is_etherdev_addr into __KERNEL__ ifdef
      
      This patch introduces a new list in struct net_device and brings a set of
      functions to handle the work with device address list. The list is a replacement
      for the original dev_addr field and because in some situations there is need to
      carry several device addresses with the net device. To be backward compatible,
      dev_addr is made to point to the first member of the list so original drivers
      sees no difference.
      Signed-off-by: NJiri Pirko <jpirko@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f001fde5
  10. 28 4月, 2009 2 次提交
  11. 27 4月, 2009 4 次提交
  12. 21 4月, 2009 1 次提交
  13. 16 4月, 2009 1 次提交
  14. 28 3月, 2009 1 次提交
    • D
      net: Add missing include into include/linux/netdevice.h · cc0be322
      Dmitri Vorobiev 提交于
      The inline function skb_gro_mac_header defined in include/linux/netdevice.h
      makes use of page_address(). Depending on configuration options, the latter
      is either defined as a macro or is declared as a function in another header
      file, namely include/linux/mm.h. However, include/linux/netdevice.h does not
      include include/linux/mm.h.
      
      On MIPS, this has produced the following build error:
      
        CC      kernel/sysctl_check.o
      In file included from include/linux/icmpv6.h:173,
                       from include/linux/ipv6.h:208,
                       from include/net/ip_vs.h:26,
                       from kernel/sysctl_check.c:6:
      include/linux/netdevice.h: In function 'skb_gro_mac_header':
      include/linux/netdevice.h:1132: error: implicit declaration of function
      'page_address'
      include/linux/netdevice.h:1133: warning: pointer/integer type mismatch
      in conditional expression
      make[1]: *** [kernel/sysctl_check.o] Error 1
      make: *** [kernel] Error 2
      
      The patch adds the missing include and fixes the build error.
      Signed-off-by: NDmitri Vorobiev <dmitri.vorobiev@movial.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      cc0be322
  15. 17 3月, 2009 1 次提交
    • H
      GRO: Move netpoll checks to correct location · d1c76af9
      Herbert Xu 提交于
      As my netpoll fix for net doesn't really work for net-next, we
      need this update to move the checks into the right place.  As it
      stands we may pass freed skbs to netpoll_receive_skb.
      
      This patch also introduces a netpoll_rx_on function to avoid GRO
      completely if we're invoked through netpoll.  This might seem
      paranoid but as netpoll may have an external receive hook it's
      better to be safe than sorry.  I don't think we need this for
      2.6.29 though since there's nothing immediately broken by it.
      
      This patch also moves the GRO_* return values to netdevice.h since
      VLAN needs them too (I tried to avoid this originally but alas
      this seems to be the easiest way out).  This fixes a bug in VLAN
      where it continued to use the old return value 2 instead of the
      correct GRO_DROP.
      Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d1c76af9
  16. 14 3月, 2009 3 次提交
  17. 05 3月, 2009 1 次提交
    • D
      vlan: Fix vlan-in-vlan crashes. · 9d40bbda
      David S. Miller 提交于
      As analyzed by Patrick McHardy, vlan needs to reset it's
      netdev_ops pointer in it's ->init() function but this
      leaves the compat method pointers stale.
      
      Add a netdev_resync_ops() and call it from the vlan code.
      
      Any other driver which changes ->netdev_ops after register_netdevice()
      will need to call this new function after doing so too.
      
      With help from Patrick McHardy.
      Tested-by: NPatrick McHardy <kaber@trash.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9d40bbda
  18. 15 2月, 2009 1 次提交
  19. 09 2月, 2009 2 次提交
  20. 06 2月, 2009 1 次提交
  21. 30 1月, 2009 2 次提交
  22. 22 1月, 2009 1 次提交
  23. 15 1月, 2009 1 次提交
  24. 13 1月, 2009 1 次提交
  25. 07 1月, 2009 2 次提交
  26. 05 1月, 2009 1 次提交
    • H
      gro: Add page frag support · 5d38a079
      Herbert Xu 提交于
      This patch allows GRO to merge page frags (skb_shinfo(skb)->frags)
      in one skb, rather than using the less efficient frag_list.
      
      It also adds a new interface, napi_gro_frags to allow drivers
      to inject page frags directly into the stack without allocating
      an skb.  This is intended to be the GRO equivalent for LRO's
      lro_receive_frags interface.
      
      The existing GSO interface can already handle page frags with
      or without an appended frag_list so nothing needs to be changed
      there.
      
      The merging itself is rather simple.  We store any new frag entries
      after the last existing entry, without checking whether the first
      new entry can be merged with the last existing entry.  Making this
      check would actually be easy but since no existing driver can
      produce contiguous frags anyway it would just be mental masturbation.
      
      If the total number of entries would exceed the capacity of a
      single skb, we simply resort to using frag_list as we do now.
      Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5d38a079
  27. 23 12月, 2008 1 次提交