Skip to content

Commit 16feebc

Browse files
Florian Westphaldavem330
authored andcommitted
rtnetlink: remove __rtnl_register
This removes __rtnl_register and switches callers to either rtnl_register or rtnl_register_module. Also, rtnl_register() will now print an error if memory allocation failed rather than panic the kernel. Signed-off-by: Florian Westphal <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent c1c502b commit 16feebc

File tree

6 files changed

+61
-55
lines changed

6 files changed

+61
-55
lines changed

include/net/rtnetlink.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ enum rtnl_link_flags {
1313
RTNL_FLAG_DOIT_UNLOCKED = 1,
1414
};
1515

16-
int __rtnl_register(int protocol, int msgtype,
17-
rtnl_doit_func, rtnl_dumpit_func, unsigned int flags);
1816
void rtnl_register(int protocol, int msgtype,
1917
rtnl_doit_func, rtnl_dumpit_func, unsigned int flags);
2018
int rtnl_register_module(struct module *owner, int protocol, int msgtype,

net/core/rtnetlink.c

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ int rtnl_register_module(struct module *owner,
238238
EXPORT_SYMBOL_GPL(rtnl_register_module);
239239

240240
/**
241-
* __rtnl_register - Register a rtnetlink message type
241+
* rtnl_register - Register a rtnetlink message type
242242
* @protocol: Protocol family or PF_UNSPEC
243243
* @msgtype: rtnetlink message type
244244
* @doit: Function pointer called for each request message
@@ -252,35 +252,18 @@ EXPORT_SYMBOL_GPL(rtnl_register_module);
252252
* The special protocol family PF_UNSPEC may be used to define fallback
253253
* function pointers for the case when no entry for the specific protocol
254254
* family exists.
255-
*
256-
* Returns 0 on success or a negative error code.
257-
*/
258-
int __rtnl_register(int protocol, int msgtype,
259-
rtnl_doit_func doit, rtnl_dumpit_func dumpit,
260-
unsigned int flags)
261-
{
262-
return rtnl_register_internal(NULL, protocol, msgtype,
263-
doit, dumpit, flags);
264-
}
265-
EXPORT_SYMBOL_GPL(__rtnl_register);
266-
267-
/**
268-
* rtnl_register - Register a rtnetlink message type
269-
*
270-
* Identical to __rtnl_register() but panics on failure. This is useful
271-
* as failure of this function is very unlikely, it can only happen due
272-
* to lack of memory when allocating the chain to store all message
273-
* handlers for a protocol. Meant for use in init functions where lack
274-
* of memory implies no sense in continuing.
275255
*/
276256
void rtnl_register(int protocol, int msgtype,
277257
rtnl_doit_func doit, rtnl_dumpit_func dumpit,
278258
unsigned int flags)
279259
{
280-
if (__rtnl_register(protocol, msgtype, doit, dumpit, flags) < 0)
281-
panic("Unable to register rtnetlink message handler, "
282-
"protocol = %d, message type = %d\n",
283-
protocol, msgtype);
260+
int err;
261+
262+
err = rtnl_register_internal(NULL, protocol, msgtype, doit, dumpit,
263+
flags);
264+
if (err)
265+
pr_err("Unable to register rtnetlink message handler, "
266+
"protocol = %d, message type = %d\n", protocol, msgtype);
284267
}
285268
EXPORT_SYMBOL_GPL(rtnl_register);
286269

net/ipv6/addrconf.c

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6595,27 +6595,43 @@ int __init addrconf_init(void)
65956595

65966596
rtnl_af_register(&inet6_ops);
65976597

6598-
err = __rtnl_register(PF_INET6, RTM_GETLINK, NULL, inet6_dump_ifinfo,
6599-
0);
6598+
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETLINK,
6599+
NULL, inet6_dump_ifinfo, 0);
66006600
if (err < 0)
66016601
goto errout;
66026602

6603-
/* Only the first call to __rtnl_register can fail */
6604-
__rtnl_register(PF_INET6, RTM_NEWADDR, inet6_rtm_newaddr, NULL, 0);
6605-
__rtnl_register(PF_INET6, RTM_DELADDR, inet6_rtm_deladdr, NULL, 0);
6606-
__rtnl_register(PF_INET6, RTM_GETADDR, inet6_rtm_getaddr,
6607-
inet6_dump_ifaddr, RTNL_FLAG_DOIT_UNLOCKED);
6608-
__rtnl_register(PF_INET6, RTM_GETMULTICAST, NULL,
6609-
inet6_dump_ifmcaddr, 0);
6610-
__rtnl_register(PF_INET6, RTM_GETANYCAST, NULL,
6611-
inet6_dump_ifacaddr, 0);
6612-
__rtnl_register(PF_INET6, RTM_GETNETCONF, inet6_netconf_get_devconf,
6613-
inet6_netconf_dump_devconf, RTNL_FLAG_DOIT_UNLOCKED);
6614-
6603+
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_NEWADDR,
6604+
inet6_rtm_newaddr, NULL, 0);
6605+
if (err < 0)
6606+
goto errout;
6607+
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_DELADDR,
6608+
inet6_rtm_deladdr, NULL, 0);
6609+
if (err < 0)
6610+
goto errout;
6611+
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETADDR,
6612+
inet6_rtm_getaddr, inet6_dump_ifaddr,
6613+
RTNL_FLAG_DOIT_UNLOCKED);
6614+
if (err < 0)
6615+
goto errout;
6616+
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETMULTICAST,
6617+
NULL, inet6_dump_ifmcaddr, 0);
6618+
if (err < 0)
6619+
goto errout;
6620+
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETANYCAST,
6621+
NULL, inet6_dump_ifacaddr, 0);
6622+
if (err < 0)
6623+
goto errout;
6624+
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETNETCONF,
6625+
inet6_netconf_get_devconf,
6626+
inet6_netconf_dump_devconf,
6627+
RTNL_FLAG_DOIT_UNLOCKED);
6628+
if (err < 0)
6629+
goto errout;
66156630
ipv6_addr_label_rtnl_register();
66166631

66176632
return 0;
66186633
errout:
6634+
rtnl_unregister_all(PF_INET6);
66196635
rtnl_af_unregister(&inet6_ops);
66206636
unregister_netdevice_notifier(&ipv6_dev_notf);
66216637
errlo:

net/ipv6/addrlabel.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -549,11 +549,10 @@ static int ip6addrlbl_get(struct sk_buff *in_skb, struct nlmsghdr *nlh,
549549

550550
void __init ipv6_addr_label_rtnl_register(void)
551551
{
552-
__rtnl_register(PF_INET6, RTM_NEWADDRLABEL, ip6addrlbl_newdel,
553-
NULL, RTNL_FLAG_DOIT_UNLOCKED);
554-
__rtnl_register(PF_INET6, RTM_DELADDRLABEL, ip6addrlbl_newdel,
555-
NULL, RTNL_FLAG_DOIT_UNLOCKED);
556-
__rtnl_register(PF_INET6, RTM_GETADDRLABEL, ip6addrlbl_get,
557-
ip6addrlbl_dump, RTNL_FLAG_DOIT_UNLOCKED);
552+
rtnl_register(PF_INET6, RTM_NEWADDRLABEL, ip6addrlbl_newdel,
553+
NULL, RTNL_FLAG_DOIT_UNLOCKED);
554+
rtnl_register(PF_INET6, RTM_DELADDRLABEL, ip6addrlbl_newdel,
555+
NULL, RTNL_FLAG_DOIT_UNLOCKED);
556+
rtnl_register(PF_INET6, RTM_GETADDRLABEL, ip6addrlbl_get,
557+
ip6addrlbl_dump, RTNL_FLAG_DOIT_UNLOCKED);
558558
}
559-

net/ipv6/ip6_fib.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2142,8 +2142,8 @@ int __init fib6_init(void)
21422142
if (ret)
21432143
goto out_kmem_cache_create;
21442144

2145-
ret = __rtnl_register(PF_INET6, RTM_GETROUTE, NULL, inet6_dump_fib,
2146-
0);
2145+
ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETROUTE, NULL,
2146+
inet6_dump_fib, 0);
21472147
if (ret)
21482148
goto out_unregister_subsys;
21492149

net/ipv6/route.c

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4772,11 +4772,20 @@ int __init ip6_route_init(void)
47724772
if (ret)
47734773
goto fib6_rules_init;
47744774

4775-
ret = -ENOBUFS;
4776-
if (__rtnl_register(PF_INET6, RTM_NEWROUTE, inet6_rtm_newroute, NULL, 0) ||
4777-
__rtnl_register(PF_INET6, RTM_DELROUTE, inet6_rtm_delroute, NULL, 0) ||
4778-
__rtnl_register(PF_INET6, RTM_GETROUTE, inet6_rtm_getroute, NULL,
4779-
RTNL_FLAG_DOIT_UNLOCKED))
4775+
ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_NEWROUTE,
4776+
inet6_rtm_newroute, NULL, 0);
4777+
if (ret < 0)
4778+
goto out_register_late_subsys;
4779+
4780+
ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_DELROUTE,
4781+
inet6_rtm_delroute, NULL, 0);
4782+
if (ret < 0)
4783+
goto out_register_late_subsys;
4784+
4785+
ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETROUTE,
4786+
inet6_rtm_getroute, NULL,
4787+
RTNL_FLAG_DOIT_UNLOCKED);
4788+
if (ret < 0)
47804789
goto out_register_late_subsys;
47814790

47824791
ret = register_netdevice_notifier(&ip6_route_dev_notifier);
@@ -4794,6 +4803,7 @@ int __init ip6_route_init(void)
47944803
return ret;
47954804

47964805
out_register_late_subsys:
4806+
rtnl_unregister_all(PF_INET6);
47974807
unregister_pernet_subsys(&ip6_route_net_late_ops);
47984808
fib6_rules_init:
47994809
fib6_rules_cleanup();

0 commit comments

Comments
 (0)