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:
parent
a0b63c6457
commit
26eebdc4b0
7 changed files with 30 additions and 11 deletions
|
@ -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[]);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue