netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 net-next 00/27] bonding: use neighbours instead of own lists
@ 2013-09-10 20:57 Veaceslav Falico
  2013-09-10 20:57 ` [PATCH v2 net-next 01/27] net: add adj_list to save only neighbours Veaceslav Falico
                   ` (26 more replies)
  0 siblings, 27 replies; 32+ messages in thread
From: Veaceslav Falico @ 2013-09-10 20:57 UTC (permalink / raw)
  To: netdev
  Cc: jiri, Jay Vosburgh, Andy Gospodarek, Dimitris Michailidis,
	David S. Miller, Patrick McHardy, Eric Dumazet, Alexander Duyck,
	Veaceslav Falico

(David, feel free to drop the whole patchset - I know that the window is
closed and I'm quite sure that it's not the last version, and even if it is
- I'll easily re-submit it. Sorry for the mess, again :) )

Hi,

v1  -> v2:
Fix a bug when we could remove try to remove a neighbour twice - it was
possible if we've had this neighbour already and added another devices
which had this neighbour in its lists. Fix it by following the rule - there
can be only one neighbour link, so add also _remove_neighbour() functions
to the generic _remove()s to handle the neighbour only removing, and fix
its refcounting while adding (all in patch 01).
Also, fix a vlan bug when it called unregister netdevice before unlinking -
it could possibly lead to a subte race condition - cause it was
unregistered but still in global-accessible list.
Rearrange sysfs/vlan patches so that first we fix vlan and only after we
add sysfs stuff.

RFC -> v1:
I've added proper, consistent naming for all variables/functions, uninlined
some helpers to get better backtraces, just in case (overhead is minimal,
no hot paths), rearranged patches for better review, dropped bondings
->prev and bond_for_each_slave_continue() functionality - to be able to
RCUify it easier, and renamed slave_* sysfs links to lower_* sysfs links to
maintain upper/lower naming. I've also dropped, thanks to bonding cleanup,
some heavy and ugly/intrusive patches.

I'm sending it as early as possible, because it's quite a big patchset and
some of the approaches I've chosen are not really easy/straightforward.
It's, however, quite heavily tested already and works fine.

I'm sending it to gather any feedback possible.

This patchset introduces all the needed infrastructure, on top of current
adjacent lists, to be able to remove bond's slave_list/slave->list. The
overhead in memory/CPU is minimal, and after the patchset bonding can rely
on its slave-related functions, given the proper locking. I've done some
netperf benchmarks on a vm, and the delta was about 0.1gbps for 35gbps as a
whole, so no speed fluctuations.

It also automatically creates lower/upper and master symlinks in dev's
sysfs directory.

The current version works ok, as first tests have shown. I'm testing it
further, if anything comes up - I'll update.

The per-patch description has moved from here to per-patch notes.

Thanks in advance.

CC: Jay Vosburgh <fubar@us.ibm.com>
CC: Andy Gospodarek <andy@greyhouse.net>
CC: Dimitris Michailidis <dm@chelsio.com>
CC: "David S. Miller" <davem@davemloft.net>
CC: Patrick McHardy <kaber@trash.net>
CC: Eric Dumazet <edumazet@google.com>
CC: Jiri Pirko <jiri@resnulli.us>
CC: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: Veaceslav Falico <vfalico@redhat.com>

---
 drivers/net/bonding/bond_3ad.c                  |  54 +--
 drivers/net/bonding/bond_alb.c                  |  81 ++--
 drivers/net/bonding/bond_alb.h                  |   4 +-
 drivers/net/bonding/bond_main.c                 | 296 ++++++++-------
 drivers/net/bonding/bond_procfs.c               |   5 +-
 drivers/net/bonding/bond_sysfs.c                |  62 +--
 drivers/net/bonding/bonding.h                   |  74 ++--
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c |   3 +-
 include/linux/netdevice.h                       |  57 ++-
 net/8021q/vlan.c                                |  18 +-
 net/core/dev.c                                  | 482 +++++++++++++++++++-----
 11 files changed, 724 insertions(+), 412 deletions(-)

^ permalink raw reply	[flat|nested] 32+ messages in thread

end of thread, other threads:[~2013-09-11  5:40 UTC | newest]

Thread overview: 32+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-10 20:57 [PATCH v2 net-next 00/27] bonding: use neighbours instead of own lists Veaceslav Falico
2013-09-10 20:57 ` [PATCH v2 net-next 01/27] net: add adj_list to save only neighbours Veaceslav Falico
2013-09-10 20:57 ` [PATCH v2 net-next 02/27] net: add RCU variant to search for netdev_adjacent link Veaceslav Falico
2013-09-10 20:57 ` [PATCH v2 net-next 03/27] net: uninline netdev neighbour functions Veaceslav Falico
2013-09-10 20:57 ` [PATCH v2 net-next 04/27] net: add netdev_adjacent->private and allow to use it Veaceslav Falico
2013-09-10 20:57 ` [PATCH v2 net-next 05/27] bonding: populate neighbour's private on enslave Veaceslav Falico
2013-09-10 20:57 ` [PATCH v2 net-next 06/27] bonding: modify bond_get_slave_by_dev() to use neighbours Veaceslav Falico
2013-09-10 20:57 ` [PATCH v2 net-next 07/27] net: add for_each iterators through neighbour lower link's private Veaceslav Falico
2013-09-11  1:46   ` Cong Wang
2013-09-11  5:37     ` Veaceslav Falico
2013-09-10 20:57 ` [PATCH v2 net-next 08/27] bonding: remove bond_for_each_slave_reverse() Veaceslav Falico
2013-09-11  1:53   ` Cong Wang
2013-09-11  5:39     ` Veaceslav Falico
2013-09-10 20:57 ` [PATCH v2 net-next 09/27] bonding: make bond_for_each_slave() use lower neighbour's private Veaceslav Falico
2013-09-10 20:57 ` [PATCH v2 net-next 10/27] bonding: use bond_for_each_slave() in bond_uninit() Veaceslav Falico
2013-09-10 20:57 ` [PATCH v2 net-next 11/27] bonding: rework bond_3ad_xmit_xor() to use bond_for_each_slave() only Veaceslav Falico
2013-09-10 20:57 ` [PATCH v2 net-next 12/27] bonding: rework rlb_next_rx_slave() to use bond_for_each_slave() Veaceslav Falico
2013-09-10 20:57 ` [PATCH v2 net-next 13/27] bonding: rework bond_find_best_slave() " Veaceslav Falico
2013-09-10 20:57 ` [PATCH v2 net-next 14/27] bonding: rework bond_ab_arp_probe() " Veaceslav Falico
2013-09-10 20:57 ` [PATCH v2 net-next 15/27] bonding: remove unused bond_for_each_slave_from() Veaceslav Falico
2013-09-10 20:58 ` [PATCH v2 net-next 16/27] bonding: add bond_has_slaves() and use it Veaceslav Falico
2013-09-10 20:58 ` [PATCH v2 net-next 17/27] bonding: convert bond_has_slaves() to use the neighbour list Veaceslav Falico
2013-09-10 20:58 ` [PATCH v2 net-next 18/27] net: add a possibility to get private from netdev_adjacent->list Veaceslav Falico
2013-09-10 20:58 ` [PATCH v2 net-next 19/27] bonding: convert first/last slave logic to use neighbours Veaceslav Falico
2013-09-10 20:58 ` [PATCH v2 net-next 20/27] bonding: remove bond_prev_slave() Veaceslav Falico
2013-09-10 20:58 ` [PATCH v2 net-next 21/27] net: add a function to get the next private Veaceslav Falico
2013-09-10 20:58 ` [PATCH v2 net-next 22/27] bonding: use neighbours for bond_next_slave() Veaceslav Falico
2013-09-10 20:58 ` [PATCH v2 net-next 23/27] bonding: remove slave lists Veaceslav Falico
2013-09-10 20:58 ` [PATCH v2 net-next 24/27] vlan: link the upper neighbour only after registering Veaceslav Falico
2013-09-10 20:58 ` [PATCH v2 net-next 25/27] vlan: unlink the upper neighbour before unregistering Veaceslav Falico
2013-09-10 20:58 ` [PATCH v2 net-next 26/27] net: expose the master link to sysfs, and remove it from bond Veaceslav Falico
2013-09-10 20:58 ` [PATCH v2 net-next 27/27] net: create sysfs symlinks for neighbour devices Veaceslav Falico

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).