mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-09 06:43:09 +00:00
net: core: introduce __netdev_notify_peers
There are some use cases for netdev_notify_peers in the context when rtnl lock is already held. Introduce lockless version of netdev_notify_peers call to save the extra code to call call_netdevice_notifiers(NETDEV_NOTIFY_PEERS, dev); call_netdevice_notifiers(NETDEV_RESEND_IGMP, dev); After that, convert netdev_notify_peers to call the new helper. Suggested-by: Nathan Lynch <nathanl@linux.ibm.com> Signed-off-by: Lijun Pan <ljp@linux.ibm.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
322e53d1e2
commit
7061eb8cfa
@ -4547,6 +4547,7 @@ void __dev_set_rx_mode(struct net_device *dev);
|
||||
int dev_set_promiscuity(struct net_device *dev, int inc);
|
||||
int dev_set_allmulti(struct net_device *dev, int inc);
|
||||
void netdev_state_change(struct net_device *dev);
|
||||
void __netdev_notify_peers(struct net_device *dev);
|
||||
void netdev_notify_peers(struct net_device *dev);
|
||||
void netdev_features_change(struct net_device *dev);
|
||||
/* Load a device via the kmod */
|
||||
|
@ -1456,6 +1456,25 @@ void netdev_state_change(struct net_device *dev)
|
||||
}
|
||||
EXPORT_SYMBOL(netdev_state_change);
|
||||
|
||||
/**
|
||||
* __netdev_notify_peers - notify network peers about existence of @dev,
|
||||
* to be called when rtnl lock is already held.
|
||||
* @dev: network device
|
||||
*
|
||||
* Generate traffic such that interested network peers are aware of
|
||||
* @dev, such as by generating a gratuitous ARP. This may be used when
|
||||
* a device wants to inform the rest of the network about some sort of
|
||||
* reconfiguration such as a failover event or virtual machine
|
||||
* migration.
|
||||
*/
|
||||
void __netdev_notify_peers(struct net_device *dev)
|
||||
{
|
||||
ASSERT_RTNL();
|
||||
call_netdevice_notifiers(NETDEV_NOTIFY_PEERS, dev);
|
||||
call_netdevice_notifiers(NETDEV_RESEND_IGMP, dev);
|
||||
}
|
||||
EXPORT_SYMBOL(__netdev_notify_peers);
|
||||
|
||||
/**
|
||||
* netdev_notify_peers - notify network peers about existence of @dev
|
||||
* @dev: network device
|
||||
@ -1469,8 +1488,7 @@ EXPORT_SYMBOL(netdev_state_change);
|
||||
void netdev_notify_peers(struct net_device *dev)
|
||||
{
|
||||
rtnl_lock();
|
||||
call_netdevice_notifiers(NETDEV_NOTIFY_PEERS, dev);
|
||||
call_netdevice_notifiers(NETDEV_RESEND_IGMP, dev);
|
||||
__netdev_notify_peers(dev);
|
||||
rtnl_unlock();
|
||||
}
|
||||
EXPORT_SYMBOL(netdev_notify_peers);
|
||||
|
Loading…
Reference in New Issue
Block a user