forked from Minki/linux
bonding: create bond_first_slave_rcu()
The bond_first_slave_rcu() will be used to instead of bond_first_slave() in rcu_read_lock(). According to the Jay Vosburgh's suggestion, the struct netdev_adjacent should hide from users who wanted to use it directly. so I package a new function to get the first slave of the bond. Suggested-by: Nikolay Aleksandrov <nikolay@redhat.com> Suggested-by: Jay Vosburgh <fubar@us.ibm.com> Suggested-by: Veaceslav Falico <vfalico@redhat.com> Signed-off-by: Ding Tianhong <dingtianhong@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
2e52f4fe36
commit
e001bfad91
@ -101,6 +101,10 @@
|
||||
netdev_adjacent_get_private(bond_slave_list(bond)->prev) : \
|
||||
NULL)
|
||||
|
||||
/* Caller must have rcu_read_lock */
|
||||
#define bond_first_slave_rcu(bond) \
|
||||
netdev_lower_get_first_private_rcu(bond->dev)
|
||||
|
||||
#define bond_is_first_slave(bond, pos) (pos == bond_first_slave(bond))
|
||||
#define bond_is_last_slave(bond, pos) (pos == bond_last_slave(bond))
|
||||
|
||||
|
@ -2907,6 +2907,7 @@ void *netdev_lower_get_next_private_rcu(struct net_device *dev,
|
||||
priv = netdev_lower_get_next_private_rcu(dev, &(iter)))
|
||||
|
||||
void *netdev_adjacent_get_private(struct list_head *adj_list);
|
||||
void *netdev_lower_get_first_private_rcu(struct net_device *dev);
|
||||
struct net_device *netdev_master_upper_dev_get(struct net_device *dev);
|
||||
struct net_device *netdev_master_upper_dev_get_rcu(struct net_device *dev);
|
||||
int netdev_upper_dev_link(struct net_device *dev, struct net_device *upper_dev);
|
||||
|
@ -4543,6 +4543,27 @@ void *netdev_lower_get_next_private_rcu(struct net_device *dev,
|
||||
}
|
||||
EXPORT_SYMBOL(netdev_lower_get_next_private_rcu);
|
||||
|
||||
/**
|
||||
* netdev_lower_get_first_private_rcu - Get the first ->private from the
|
||||
* lower neighbour list, RCU
|
||||
* variant
|
||||
* @dev: device
|
||||
*
|
||||
* Gets the first netdev_adjacent->private from the dev's lower neighbour
|
||||
* list. The caller must hold RCU read lock.
|
||||
*/
|
||||
void *netdev_lower_get_first_private_rcu(struct net_device *dev)
|
||||
{
|
||||
struct netdev_adjacent *lower;
|
||||
|
||||
lower = list_first_or_null_rcu(&dev->adj_list.lower,
|
||||
struct netdev_adjacent, list);
|
||||
if (lower)
|
||||
return lower->private;
|
||||
return NULL;
|
||||
}
|
||||
EXPORT_SYMBOL(netdev_lower_get_first_private_rcu);
|
||||
|
||||
/**
|
||||
* netdev_master_upper_dev_get_rcu - Get master upper device
|
||||
* @dev: device
|
||||
|
Loading…
Reference in New Issue
Block a user