Skip to content

Commit 26eebdc

Browse files
q2venPaolo Abeni
authored andcommitted
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 <[email protected]> Reviewed-by: Matt Johnston <[email protected]> Signed-off-by: Paolo Abeni <[email protected]>
1 parent a0b63c6 commit 26eebdc

File tree

7 files changed

+30
-11
lines changed

7 files changed

+30
-11
lines changed

include/net/rtnetlink.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ struct rtnl_af_ops {
204204
size_t (*get_stats_af_size)(const struct net_device *dev);
205205
};
206206

207-
void rtnl_af_register(struct rtnl_af_ops *ops);
207+
int rtnl_af_register(struct rtnl_af_ops *ops);
208208
void rtnl_af_unregister(struct rtnl_af_ops *ops);
209209

210210
struct net *rtnl_link_get_net(struct net *src_net, struct nlattr *tb[]);

net/bridge/br_netlink.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1924,7 +1924,9 @@ int __init br_netlink_init(void)
19241924
if (err)
19251925
goto out;
19261926

1927-
rtnl_af_register(&br_af_ops);
1927+
err = rtnl_af_register(&br_af_ops);
1928+
if (err)
1929+
goto out_vlan;
19281930

19291931
err = rtnl_link_register(&br_link_ops);
19301932
if (err)
@@ -1934,6 +1936,8 @@ int __init br_netlink_init(void)
19341936

19351937
out_af:
19361938
rtnl_af_unregister(&br_af_ops);
1939+
out_vlan:
1940+
br_vlan_rtnl_uninit();
19371941
out:
19381942
return err;
19391943
}

net/core/rtnetlink.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -686,11 +686,13 @@ static const struct rtnl_af_ops *rtnl_af_lookup(const int family)
686686
*
687687
* Returns 0 on success or a negative error code.
688688
*/
689-
void rtnl_af_register(struct rtnl_af_ops *ops)
689+
int rtnl_af_register(struct rtnl_af_ops *ops)
690690
{
691691
rtnl_lock();
692692
list_add_tail_rcu(&ops->list, &rtnl_af_ops);
693693
rtnl_unlock();
694+
695+
return 0;
694696
}
695697
EXPORT_SYMBOL_GPL(rtnl_af_register);
696698

net/ipv4/devinet.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2827,7 +2827,8 @@ void __init devinet_init(void)
28272827
register_pernet_subsys(&devinet_ops);
28282828
register_netdevice_notifier(&ip_netdev_notifier);
28292829

2830-
rtnl_af_register(&inet_af_ops);
2830+
if (rtnl_af_register(&inet_af_ops))
2831+
panic("Unable to register inet_af_ops\n");
28312832

28322833
rtnl_register_many(devinet_rtnl_msg_handlers);
28332834
}

net/ipv6/addrconf.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7468,7 +7468,9 @@ int __init addrconf_init(void)
74687468

74697469
addrconf_verify(&init_net);
74707470

7471-
rtnl_af_register(&inet6_ops);
7471+
err = rtnl_af_register(&inet6_ops);
7472+
if (err)
7473+
goto erraf;
74727474

74737475
err = rtnl_register_many(addrconf_rtnl_msg_handlers);
74747476
if (err)
@@ -7482,6 +7484,7 @@ int __init addrconf_init(void)
74827484
errout:
74837485
rtnl_unregister_all(PF_INET6);
74847486
rtnl_af_unregister(&inet6_ops);
7487+
erraf:
74857488
unregister_netdevice_notifier(&ipv6_dev_notf);
74867489
errlo:
74877490
destroy_workqueue(addrconf_wq);

net/mctp/device.c

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -535,14 +535,20 @@ int __init mctp_device_init(void)
535535
int err;
536536

537537
register_netdevice_notifier(&mctp_dev_nb);
538-
rtnl_af_register(&mctp_af_ops);
538+
539+
err = rtnl_af_register(&mctp_af_ops);
540+
if (err)
541+
goto err_notifier;
539542

540543
err = rtnl_register_many(mctp_device_rtnl_msg_handlers);
541-
if (err) {
542-
rtnl_af_unregister(&mctp_af_ops);
543-
unregister_netdevice_notifier(&mctp_dev_nb);
544-
}
544+
if (err)
545+
goto err_af;
545546

547+
return 0;
548+
err_af:
549+
rtnl_af_unregister(&mctp_af_ops);
550+
err_notifier:
551+
unregister_netdevice_notifier(&mctp_dev_nb);
546552
return err;
547553
}
548554

net/mpls/af_mpls.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2753,7 +2753,9 @@ static int __init mpls_init(void)
27532753

27542754
dev_add_pack(&mpls_packet_type);
27552755

2756-
rtnl_af_register(&mpls_af_ops);
2756+
err = rtnl_af_register(&mpls_af_ops);
2757+
if (err)
2758+
goto out_unregister_dev_type;
27572759

27582760
err = rtnl_register_many(mpls_rtnl_msg_handlers);
27592761
if (err)
@@ -2773,6 +2775,7 @@ static int __init mpls_init(void)
27732775
rtnl_unregister_many(mpls_rtnl_msg_handlers);
27742776
out_unregister_rtnl_af:
27752777
rtnl_af_unregister(&mpls_af_ops);
2778+
out_unregister_dev_type:
27762779
dev_remove_pack(&mpls_packet_type);
27772780
out_unregister_pernet:
27782781
unregister_pernet_subsys(&mpls_net_ops);

0 commit comments

Comments
 (0)