mirror of https://gitee.com/openkylin/linux.git
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:
parent
c8c23903f1
commit
18e1e9bc5d
|
@ -249,6 +249,34 @@ struct bonding {
|
|||
#define bond_slave_get_rtnl(dev) \
|
||||
((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
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue