mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 02:53:36 +02:00
Merge branch 'net-devlink-move-netdev-notifier-block-to-dest-namespace-during-reload'
Jiri Pirko says: ==================== net: devlink: move netdev notifier block to dest namespace during reload Patch #1 is just a dependency of patch #2, which is the actual fix. ==================== Link: https://lore.kernel.org/r/20221108132208.938676-1-jiri@resnulli.us Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
bf9b85562a
|
|
@ -2826,6 +2826,8 @@ int unregister_netdevice_notifier(struct notifier_block *nb);
|
|||
int register_netdevice_notifier_net(struct net *net, struct notifier_block *nb);
|
||||
int unregister_netdevice_notifier_net(struct net *net,
|
||||
struct notifier_block *nb);
|
||||
void move_netdevice_notifier_net(struct net *src_net, struct net *dst_net,
|
||||
struct notifier_block *nb);
|
||||
int register_netdevice_notifier_dev_net(struct net_device *dev,
|
||||
struct notifier_block *nb,
|
||||
struct netdev_net_notifier *nn);
|
||||
|
|
|
|||
|
|
@ -1861,6 +1861,22 @@ int unregister_netdevice_notifier_net(struct net *net,
|
|||
}
|
||||
EXPORT_SYMBOL(unregister_netdevice_notifier_net);
|
||||
|
||||
static void __move_netdevice_notifier_net(struct net *src_net,
|
||||
struct net *dst_net,
|
||||
struct notifier_block *nb)
|
||||
{
|
||||
__unregister_netdevice_notifier_net(src_net, nb);
|
||||
__register_netdevice_notifier_net(dst_net, nb, true);
|
||||
}
|
||||
|
||||
void move_netdevice_notifier_net(struct net *src_net, struct net *dst_net,
|
||||
struct notifier_block *nb)
|
||||
{
|
||||
rtnl_lock();
|
||||
__move_netdevice_notifier_net(src_net, dst_net, nb);
|
||||
rtnl_unlock();
|
||||
}
|
||||
|
||||
int register_netdevice_notifier_dev_net(struct net_device *dev,
|
||||
struct notifier_block *nb,
|
||||
struct netdev_net_notifier *nn)
|
||||
|
|
@ -1897,10 +1913,8 @@ static void move_netdevice_notifiers_dev_net(struct net_device *dev,
|
|||
{
|
||||
struct netdev_net_notifier *nn;
|
||||
|
||||
list_for_each_entry(nn, &dev->net_notifier_list, list) {
|
||||
__unregister_netdevice_notifier_net(dev_net(dev), nn->nb);
|
||||
__register_netdevice_notifier_net(net, nn->nb, true);
|
||||
}
|
||||
list_for_each_entry(nn, &dev->net_notifier_list, list)
|
||||
__move_netdevice_notifier_net(dev_net(dev), net, nn->nb);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -4502,8 +4502,11 @@ static int devlink_reload(struct devlink *devlink, struct net *dest_net,
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
if (dest_net && !net_eq(dest_net, curr_net))
|
||||
if (dest_net && !net_eq(dest_net, curr_net)) {
|
||||
move_netdevice_notifier_net(curr_net, dest_net,
|
||||
&devlink->netdevice_nb);
|
||||
write_pnet(&devlink->_net, dest_net);
|
||||
}
|
||||
|
||||
err = devlink->ops->reload_up(devlink, action, limit, actions_performed, extack);
|
||||
devlink_reload_failed_set(devlink, !!err);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user