diff options
Diffstat (limited to 'net/devlink/core.c')
| -rw-r--r-- | net/devlink/core.c | 16 | 
1 files changed, 7 insertions, 9 deletions
diff --git a/net/devlink/core.c b/net/devlink/core.c index 777b091ef74d..c23ebabadc52 100644 --- a/net/devlink/core.c +++ b/net/devlink/core.c @@ -204,11 +204,6 @@ struct devlink *devlink_alloc_ns(const struct devlink_ops *ops,  	if (ret < 0)  		goto err_xa_alloc; -	devlink->netdevice_nb.notifier_call = devlink_port_netdevice_event; -	ret = register_netdevice_notifier(&devlink->netdevice_nb); -	if (ret) -		goto err_register_netdevice_notifier; -  	devlink->dev = dev;  	devlink->ops = ops;  	xa_init_flags(&devlink->ports, XA_FLAGS_ALLOC); @@ -233,8 +228,6 @@ struct devlink *devlink_alloc_ns(const struct devlink_ops *ops,  	return devlink; -err_register_netdevice_notifier: -	xa_erase(&devlinks, devlink->index);  err_xa_alloc:  	kfree(devlink);  	return NULL; @@ -266,8 +259,6 @@ void devlink_free(struct devlink *devlink)  	xa_destroy(&devlink->params);  	xa_destroy(&devlink->ports); -	WARN_ON_ONCE(unregister_netdevice_notifier(&devlink->netdevice_nb)); -  	xa_erase(&devlinks, devlink->index);  	devlink_put(devlink); @@ -303,6 +294,10 @@ static struct pernet_operations devlink_pernet_ops __net_initdata = {  	.pre_exit = devlink_pernet_pre_exit,  }; +static struct notifier_block devlink_port_netdevice_nb = { +	.notifier_call = devlink_port_netdevice_event, +}; +  static int __init devlink_init(void)  {  	int err; @@ -311,6 +306,9 @@ static int __init devlink_init(void)  	if (err)  		goto out;  	err = register_pernet_subsys(&devlink_pernet_ops); +	if (err) +		goto out; +	err = register_netdevice_notifier(&devlink_port_netdevice_nb);  out:  	WARN_ON(err);  |