1. 24 Jun, 2013 3 commits
  2. 20 Jun, 2013 1 commit
  3. 19 Jun, 2013 1 commit
  4. 12 Jun, 2013 2 commits
  5. 10 Jun, 2013 2 commits
  6. 07 Jun, 2013 1 commit
  7. 05 Jun, 2013 9 commits
  8. 04 Jun, 2013 7 commits
  9. 03 Jun, 2013 5 commits
  10. 01 Jun, 2013 6 commits
  11. 31 May, 2013 3 commits
    • Jay Vosburgh's avatar
      net/core: dev_mc_sync_multiple calls wrong helper · b190a508
      Jay Vosburgh authored
      The dev_mc_sync_multiple function is currently calling
      __hw_addr_sync, and not __hw_addr_sync_multiple.  This will result in
      addresses only being synced to the first device from the set.
      
      	Corrected by calling the _multiple variant.
      Signed-off-by: default avatarJay Vosburgh <fubar@us.ibm.com>
      Reviewed-by: default avatarVlad Yasevich <vyasevic@redhat.com>
      Tested-by: default avatarShawn Bohrer <sbohrer@rgmadvisors.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b190a508
    • Jay Vosburgh's avatar
      net/core: __hw_addr_sync_one / _multiple broken · 29ca2f8f
      Jay Vosburgh authored
      Currently, __hw_addr_sync_one is called in a loop by
      __hw_addr_sync_multiple to sync each of a "from" device's hw addresses
      to a "to" device.  __hw_addr_sync_one calls __hw_addr_add_ex to attempt
      to add each address.  __hw_addr_add_ex is called with global=false, and
      sync=true.
      
      	__hw_addr_add_ex checks to see if the new address matches an
      address already on the list.  If so, it tests global and sync.  In this
      case, sync=true, and it then checks if the address is already synced,
      and if so, returns 0.
      
      	This 0 return causes __hw_addr_sync_one to increment the sync_cnt
      and refcount for the "from" list's address entry, even though the address
      is already synced and has a reference and sync_cnt.  This will cause
      the sync_cnt and refcount to increment without bound every time an
      addresses is added to the "from" device and synced to the "to" device.
      
      	The fix here has two parts:
      
      	First, when __hw_addr_add_ex finds the address already exists
      and is synced, return -EEXIST instead of 0.
      
      	Second, __hw_addr_sync_one checks the error return for -EEXIST,
      and if so, it (a) does not add a refcount/sync_cnt, and (b) returns 0
      itself so that __hw_addr_sync_multiple will not return an error.
      Signed-off-by: default avatarJay Vosburgh <fubar@us.ibm.com>
      Reviewed-by: default avatarVlad Yasevich <vyasevic@redhat.com>
      Tested-by: default avatarShawn Bohrer <sbohrer@rgmadvisors.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      29ca2f8f
    • Jay Vosburgh's avatar
      net/core: __hw_addr_unsync_one "from" address not marked synced · 60ba834c
      Jay Vosburgh authored
      When an address is added to a subordinate interface (the "to"
      list), the address entry in the "from" list is not marked "synced" as
      the entry added to the "to" list is.
      
      	When performing the unsync operation (e.g., dev_mc_unsync),
      __hw_addr_unsync_one calls __hw_addr_del_entry with the "synced"
      parameter set to true for the case when the address reference is being
      released from the "from" list.  This causes a test inside to fail,
      with the result being that the reference count on the "from" address
      is not properly decremeted and the address on the "from" list will
      never be freed.
      
      	Correct this by having __hw_addr_unsync_one call the
      __hw_addr_del_entry function with the "sync" flag set to false for the
      "remove from the from list" case.
      Signed-off-by: default avatarJay Vosburgh <fubar@us.ibm.com>
      Reviewed-by: default avatarVlad Yasevich <vyasevic@redhat.com>
      Tested-by: default avatarShawn Bohrer <sbohrer@rgmadvisors.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      60ba834c