1
0
Fork 0
mirror of synced 2025-03-06 20:59:54 +01:00

rtnetlink: Return int from rtnl_af_register().

The next patch will add init_srcu_struct() in rtnl_af_register(),
then we need to handle its error.

Let's add the error handling in advance to make the following
patch cleaner.

Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Reviewed-by: Matt Johnston <matt@codeconstruct.com.au>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
Kuniyuki Iwashima 2024-10-16 11:53:56 -07:00 committed by Paolo Abeni
parent a0b63c6457
commit 26eebdc4b0
7 changed files with 30 additions and 11 deletions

View file

@ -204,7 +204,7 @@ struct rtnl_af_ops {
size_t (*get_stats_af_size)(const struct net_device *dev);
};
void rtnl_af_register(struct rtnl_af_ops *ops);
int rtnl_af_register(struct rtnl_af_ops *ops);
void rtnl_af_unregister(struct rtnl_af_ops *ops);
struct net *rtnl_link_get_net(struct net *src_net, struct nlattr *tb[]);

View file

@ -1924,7 +1924,9 @@ int __init br_netlink_init(void)
if (err)
goto out;
rtnl_af_register(&br_af_ops);
err = rtnl_af_register(&br_af_ops);
if (err)
goto out_vlan;
err = rtnl_link_register(&br_link_ops);
if (err)
@ -1934,6 +1936,8 @@ int __init br_netlink_init(void)
out_af:
rtnl_af_unregister(&br_af_ops);
out_vlan:
br_vlan_rtnl_uninit();
out:
return err;
}

View file

@ -686,11 +686,13 @@ static const struct rtnl_af_ops *rtnl_af_lookup(const int family)
*
* Returns 0 on success or a negative error code.
*/
void rtnl_af_register(struct rtnl_af_ops *ops)
int rtnl_af_register(struct rtnl_af_ops *ops)
{
rtnl_lock();
list_add_tail_rcu(&ops->list, &rtnl_af_ops);
rtnl_unlock();
return 0;
}
EXPORT_SYMBOL_GPL(rtnl_af_register);

View file

@ -2827,7 +2827,8 @@ void __init devinet_init(void)
register_pernet_subsys(&devinet_ops);
register_netdevice_notifier(&ip_netdev_notifier);
rtnl_af_register(&inet_af_ops);
if (rtnl_af_register(&inet_af_ops))
panic("Unable to register inet_af_ops\n");
rtnl_register_many(devinet_rtnl_msg_handlers);
}

View file

@ -7468,7 +7468,9 @@ int __init addrconf_init(void)
addrconf_verify(&init_net);
rtnl_af_register(&inet6_ops);
err = rtnl_af_register(&inet6_ops);
if (err)
goto erraf;
err = rtnl_register_many(addrconf_rtnl_msg_handlers);
if (err)
@ -7482,6 +7484,7 @@ int __init addrconf_init(void)
errout:
rtnl_unregister_all(PF_INET6);
rtnl_af_unregister(&inet6_ops);
erraf:
unregister_netdevice_notifier(&ipv6_dev_notf);
errlo:
destroy_workqueue(addrconf_wq);

View file

@ -535,14 +535,20 @@ int __init mctp_device_init(void)
int err;
register_netdevice_notifier(&mctp_dev_nb);
rtnl_af_register(&mctp_af_ops);
err = rtnl_af_register(&mctp_af_ops);
if (err)
goto err_notifier;
err = rtnl_register_many(mctp_device_rtnl_msg_handlers);
if (err) {
rtnl_af_unregister(&mctp_af_ops);
unregister_netdevice_notifier(&mctp_dev_nb);
}
if (err)
goto err_af;
return 0;
err_af:
rtnl_af_unregister(&mctp_af_ops);
err_notifier:
unregister_netdevice_notifier(&mctp_dev_nb);
return err;
}

View file

@ -2753,7 +2753,9 @@ static int __init mpls_init(void)
dev_add_pack(&mpls_packet_type);
rtnl_af_register(&mpls_af_ops);
err = rtnl_af_register(&mpls_af_ops);
if (err)
goto out_unregister_dev_type;
err = rtnl_register_many(mpls_rtnl_msg_handlers);
if (err)
@ -2773,6 +2775,7 @@ out_unregister_rtnl:
rtnl_unregister_many(mpls_rtnl_msg_handlers);
out_unregister_rtnl_af:
rtnl_af_unregister(&mpls_af_ops);
out_unregister_dev_type:
dev_remove_pack(&mpls_packet_type);
out_unregister_pernet:
unregister_pernet_subsys(&mpls_net_ops);