bonding: add __bond_next_slave() which uses neighbours
Add a new function, __bond_next_slave(), which uses neighbours to find the next slave after the slave provided. It will be further used to gradually go start using neighbour netdev_adjacent infrastructure instead of bonding's own lists. CC: Jay Vosburgh <fubar@us.ibm.com> CC: Andy Gospodarek <andy@greyhouse.net> CC: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: Veaceslav Falico <vfalico@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
c8c23903f1
commit
18e1e9bc5d
@@ -249,6 +249,34 @@ struct bonding {
|
|||||||
#define bond_slave_get_rtnl(dev) \
|
#define bond_slave_get_rtnl(dev) \
|
||||||
((struct slave *) rtnl_dereference(dev->rx_handler_data))
|
((struct slave *) rtnl_dereference(dev->rx_handler_data))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* __bond_next_slave - get the next slave after the one provided
|
||||||
|
* @bond - bonding struct
|
||||||
|
* @slave - the slave provided
|
||||||
|
*
|
||||||
|
* Returns the next slave after the slave provided, first slave if the
|
||||||
|
* slave provided is the last slave and NULL if slave is not found
|
||||||
|
*/
|
||||||
|
static inline struct slave *__bond_next_slave(struct bonding *bond,
|
||||||
|
struct slave *slave)
|
||||||
|
{
|
||||||
|
struct slave *slave_iter;
|
||||||
|
struct list_head *iter;
|
||||||
|
bool found = false;
|
||||||
|
|
||||||
|
netdev_for_each_lower_private(bond->dev, slave_iter, iter) {
|
||||||
|
if (found)
|
||||||
|
return slave_iter;
|
||||||
|
if (slave_iter == slave)
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (found)
|
||||||
|
return bond_first_slave(bond);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns NULL if the net_device does not belong to any of the bond's slaves
|
* Returns NULL if the net_device does not belong to any of the bond's slaves
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user