Skip to content

Commit a37b0e4

Browse files
q2venkuba-moo
authored andcommitted
ipv6: Use rtnl_register_many().
We will remove rtnl_register_module() in favour of rtnl_register_many(). rtnl_register_many() will unwind the previous successful registrations on failure and simplify module error handling. Let's use rtnl_register_many() instead. Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Link: https://patch.msgid.link/20241014201828.91221-8-kuniyu@amazon.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 465bac9 commit a37b0e4

File tree

4 files changed

+51
-67
lines changed

4 files changed

+51
-67
lines changed

net/ipv6/addrconf.c

Lines changed: 23 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7406,6 +7406,27 @@ static struct rtnl_af_ops inet6_ops __read_mostly = {
74067406
.set_link_af = inet6_set_link_af,
74077407
};
74087408

7409+
static const struct rtnl_msg_handler addrconf_rtnl_msg_handlers[] __initconst_or_module = {
7410+
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_GETLINK,
7411+
.dumpit = inet6_dump_ifinfo, .flags = RTNL_FLAG_DUMP_UNLOCKED},
7412+
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_NEWADDR,
7413+
.doit = inet6_rtm_newaddr},
7414+
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_DELADDR,
7415+
.doit = inet6_rtm_deladdr},
7416+
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_GETADDR,
7417+
.doit = inet6_rtm_getaddr, .dumpit = inet6_dump_ifaddr,
7418+
.flags = RTNL_FLAG_DOIT_UNLOCKED | RTNL_FLAG_DUMP_UNLOCKED},
7419+
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_GETMULTICAST,
7420+
.dumpit = inet6_dump_ifmcaddr,
7421+
.flags = RTNL_FLAG_DUMP_UNLOCKED},
7422+
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_GETANYCAST,
7423+
.dumpit = inet6_dump_ifacaddr,
7424+
.flags = RTNL_FLAG_DUMP_UNLOCKED},
7425+
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_GETNETCONF,
7426+
.doit = inet6_netconf_get_devconf, .dumpit = inet6_netconf_dump_devconf,
7427+
.flags = RTNL_FLAG_DOIT_UNLOCKED | RTNL_FLAG_DUMP_UNLOCKED},
7428+
};
7429+
74097430
/*
74107431
* Init / cleanup code
74117432
*/
@@ -7449,42 +7470,10 @@ int __init addrconf_init(void)
74497470

74507471
rtnl_af_register(&inet6_ops);
74517472

7452-
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETLINK,
7453-
NULL, inet6_dump_ifinfo, RTNL_FLAG_DUMP_UNLOCKED);
7454-
if (err < 0)
7473+
err = rtnl_register_many(addrconf_rtnl_msg_handlers);
7474+
if (err)
74557475
goto errout;
74567476

7457-
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_NEWADDR,
7458-
inet6_rtm_newaddr, NULL, 0);
7459-
if (err < 0)
7460-
goto errout;
7461-
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_DELADDR,
7462-
inet6_rtm_deladdr, NULL, 0);
7463-
if (err < 0)
7464-
goto errout;
7465-
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETADDR,
7466-
inet6_rtm_getaddr, inet6_dump_ifaddr,
7467-
RTNL_FLAG_DOIT_UNLOCKED |
7468-
RTNL_FLAG_DUMP_UNLOCKED);
7469-
if (err < 0)
7470-
goto errout;
7471-
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETMULTICAST,
7472-
NULL, inet6_dump_ifmcaddr,
7473-
RTNL_FLAG_DUMP_UNLOCKED);
7474-
if (err < 0)
7475-
goto errout;
7476-
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETANYCAST,
7477-
NULL, inet6_dump_ifacaddr,
7478-
RTNL_FLAG_DUMP_UNLOCKED);
7479-
if (err < 0)
7480-
goto errout;
7481-
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETNETCONF,
7482-
inet6_netconf_get_devconf,
7483-
inet6_netconf_dump_devconf,
7484-
RTNL_FLAG_DOIT_UNLOCKED |
7485-
RTNL_FLAG_DUMP_UNLOCKED);
7486-
if (err < 0)
7487-
goto errout;
74887477
err = ipv6_addr_label_rtnl_register();
74897478
if (err < 0)
74907479
goto errout;

net/ipv6/addrlabel.c

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -634,23 +634,17 @@ static int ip6addrlbl_get(struct sk_buff *in_skb, struct nlmsghdr *nlh,
634634
return err;
635635
}
636636

637+
static const struct rtnl_msg_handler ipv6_adddr_label_rtnl_msg_handlers[] __initconst_or_module = {
638+
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_NEWADDRLABEL,
639+
.doit = ip6addrlbl_newdel, .flags = RTNL_FLAG_DOIT_UNLOCKED},
640+
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_DELADDRLABEL,
641+
.doit = ip6addrlbl_newdel, .flags = RTNL_FLAG_DOIT_UNLOCKED},
642+
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_GETADDRLABEL,
643+
.doit = ip6addrlbl_get, .dumpit = ip6addrlbl_dump,
644+
.flags = RTNL_FLAG_DOIT_UNLOCKED | RTNL_FLAG_DUMP_UNLOCKED},
645+
};
646+
637647
int __init ipv6_addr_label_rtnl_register(void)
638648
{
639-
int ret;
640-
641-
ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_NEWADDRLABEL,
642-
ip6addrlbl_newdel,
643-
NULL, RTNL_FLAG_DOIT_UNLOCKED);
644-
if (ret < 0)
645-
return ret;
646-
ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_DELADDRLABEL,
647-
ip6addrlbl_newdel,
648-
NULL, RTNL_FLAG_DOIT_UNLOCKED);
649-
if (ret < 0)
650-
return ret;
651-
ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETADDRLABEL,
652-
ip6addrlbl_get,
653-
ip6addrlbl_dump, RTNL_FLAG_DOIT_UNLOCKED |
654-
RTNL_FLAG_DUMP_UNLOCKED);
655-
return ret;
649+
return rtnl_register_many(ipv6_adddr_label_rtnl_msg_handlers);
656650
}

net/ipv6/ip6_fib.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2493,6 +2493,12 @@ static struct pernet_operations fib6_net_ops = {
24932493
.exit = fib6_net_exit,
24942494
};
24952495

2496+
static const struct rtnl_msg_handler fib6_rtnl_msg_handlers[] __initconst_or_module = {
2497+
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_GETROUTE,
2498+
.dumpit = inet6_dump_fib,
2499+
.flags = RTNL_FLAG_DUMP_UNLOCKED | RTNL_FLAG_DUMP_SPLIT_NLM_DONE},
2500+
};
2501+
24962502
int __init fib6_init(void)
24972503
{
24982504
int ret = -ENOMEM;
@@ -2506,9 +2512,7 @@ int __init fib6_init(void)
25062512
if (ret)
25072513
goto out_kmem_cache_create;
25082514

2509-
ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETROUTE, NULL,
2510-
inet6_dump_fib, RTNL_FLAG_DUMP_UNLOCKED |
2511-
RTNL_FLAG_DUMP_SPLIT_NLM_DONE);
2515+
ret = rtnl_register_many(fib6_rtnl_msg_handlers);
25122516
if (ret)
25132517
goto out_unregister_subsys;
25142518

net/ipv6/route.c

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6680,6 +6680,15 @@ static void bpf_iter_unregister(void)
66806680
#endif
66816681
#endif
66826682

6683+
static const struct rtnl_msg_handler ip6_route_rtnl_msg_handlers[] __initconst_or_module = {
6684+
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_NEWROUTE,
6685+
.doit = inet6_rtm_newroute},
6686+
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_DELROUTE,
6687+
.doit = inet6_rtm_delroute},
6688+
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_GETROUTE,
6689+
.doit = inet6_rtm_getroute, .flags = RTNL_FLAG_DOIT_UNLOCKED},
6690+
};
6691+
66836692
int __init ip6_route_init(void)
66846693
{
66856694
int ret;
@@ -6722,19 +6731,7 @@ int __init ip6_route_init(void)
67226731
if (ret)
67236732
goto fib6_rules_init;
67246733

6725-
ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_NEWROUTE,
6726-
inet6_rtm_newroute, NULL, 0);
6727-
if (ret < 0)
6728-
goto out_register_late_subsys;
6729-
6730-
ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_DELROUTE,
6731-
inet6_rtm_delroute, NULL, 0);
6732-
if (ret < 0)
6733-
goto out_register_late_subsys;
6734-
6735-
ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETROUTE,
6736-
inet6_rtm_getroute, NULL,
6737-
RTNL_FLAG_DOIT_UNLOCKED);
6734+
ret = rtnl_register_many(ip6_route_rtnl_msg_handlers);
67386735
if (ret < 0)
67396736
goto out_register_late_subsys;
67406737

0 commit comments

Comments
 (0)