bonding: move bond-specific init after enslave happens
authorVeaceslav Falico <vfalico@redhat.com>
Mon, 21 Oct 2013 09:48:30 +0000 (11:48 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 22 Oct 2013 23:22:09 +0000 (19:22 -0400)
commit5378c2e6ea236de847a39bdb6f3aa83137120d26
tree3fea10f4900112c624ff9474ef9453ecea8766d1
parent666d10085924d9dd4bcab7653f5d4971d8ea2498
bonding: move bond-specific init after enslave happens

As Jiri noted, currently we first do all bonding-specific initialization
(specifically - bond_select_active_slave(bond)) before we actually attach
the slave (so that it becomes visible through bond_for_each_slave() and
friends). This might result in bond_select_active_slave() not seeing the
first/new slave and, thus, not actually selecting an active slave.

Fix this by moving all the bond-related init part after we've actually
completely initialized and linked (via bond_master_upper_dev_link()) the
new slave.

Also, remove the bond_(de/a)ttach_slave(), it's useless to have functions
to ++/-- one int.

After this we have all the initialization of the new slave *before*
linking, and all the stuff that needs to be done on bonding *after* it. It
has also a bonus effect - we can remove the locking on the new slave init
completely, and only use it for bond_select_active_slave().

Reported-by: Jiri Pirko <jiri@resnulli.us>
CC: Jay Vosburgh <fubar@us.ibm.com>
CC: Andy Gospodarek <andy@greyhouse.net>
Signed-off-by: Veaceslav Falico <vfalico@redhat.com>
Acked-by: Ding Tianhong@huawei.com
Reviewed-by: Jiri Pirko <jiri@resnulli.us>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/bonding/bond_main.c