net: devlink: move netdev notifier block to dest namespace during reload
authorJiri Pirko <jiri@nvidia.com>
Tue, 8 Nov 2022 13:22:07 +0000 (14:22 +0100)
committerJakub Kicinski <kuba@kernel.org>
Wed, 9 Nov 2022 21:45:59 +0000 (13:45 -0800)
The notifier block tracking netdev changes in devlink is registered
during devlink_alloc() per-net, it is then unregistered
in devlink_free(). When devlink moves from net namespace to another one,
the notifier block needs to move along.

Fix this by adding forgotten call to move the block.

Reported-by: Ido Schimmel <idosch@idosch.org>
Fixes: 02a68a47eade ("net: devlink: track netdev with devlink_port assigned")
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Tested-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/devlink.c

index 40fcdded57e6b2bd52703f80fe171b56a907dfc2..ea0b319385fc0bd7314195c1bc967e370d9ae2cf 100644 (file)
@@ -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);