mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 00:53:34 +02:00
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>
This commit is contained in:
parent
465bac91f9
commit
a37b0e4eca
|
|
@ -7406,6 +7406,27 @@ static struct rtnl_af_ops inet6_ops __read_mostly = {
|
|||
.set_link_af = inet6_set_link_af,
|
||||
};
|
||||
|
||||
static const struct rtnl_msg_handler addrconf_rtnl_msg_handlers[] __initconst_or_module = {
|
||||
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_GETLINK,
|
||||
.dumpit = inet6_dump_ifinfo, .flags = RTNL_FLAG_DUMP_UNLOCKED},
|
||||
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_NEWADDR,
|
||||
.doit = inet6_rtm_newaddr},
|
||||
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_DELADDR,
|
||||
.doit = inet6_rtm_deladdr},
|
||||
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_GETADDR,
|
||||
.doit = inet6_rtm_getaddr, .dumpit = inet6_dump_ifaddr,
|
||||
.flags = RTNL_FLAG_DOIT_UNLOCKED | RTNL_FLAG_DUMP_UNLOCKED},
|
||||
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_GETMULTICAST,
|
||||
.dumpit = inet6_dump_ifmcaddr,
|
||||
.flags = RTNL_FLAG_DUMP_UNLOCKED},
|
||||
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_GETANYCAST,
|
||||
.dumpit = inet6_dump_ifacaddr,
|
||||
.flags = RTNL_FLAG_DUMP_UNLOCKED},
|
||||
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_GETNETCONF,
|
||||
.doit = inet6_netconf_get_devconf, .dumpit = inet6_netconf_dump_devconf,
|
||||
.flags = RTNL_FLAG_DOIT_UNLOCKED | RTNL_FLAG_DUMP_UNLOCKED},
|
||||
};
|
||||
|
||||
/*
|
||||
* Init / cleanup code
|
||||
*/
|
||||
|
|
@ -7449,42 +7470,10 @@ int __init addrconf_init(void)
|
|||
|
||||
rtnl_af_register(&inet6_ops);
|
||||
|
||||
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETLINK,
|
||||
NULL, inet6_dump_ifinfo, RTNL_FLAG_DUMP_UNLOCKED);
|
||||
if (err < 0)
|
||||
err = rtnl_register_many(addrconf_rtnl_msg_handlers);
|
||||
if (err)
|
||||
goto errout;
|
||||
|
||||
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_NEWADDR,
|
||||
inet6_rtm_newaddr, NULL, 0);
|
||||
if (err < 0)
|
||||
goto errout;
|
||||
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_DELADDR,
|
||||
inet6_rtm_deladdr, NULL, 0);
|
||||
if (err < 0)
|
||||
goto errout;
|
||||
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETADDR,
|
||||
inet6_rtm_getaddr, inet6_dump_ifaddr,
|
||||
RTNL_FLAG_DOIT_UNLOCKED |
|
||||
RTNL_FLAG_DUMP_UNLOCKED);
|
||||
if (err < 0)
|
||||
goto errout;
|
||||
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETMULTICAST,
|
||||
NULL, inet6_dump_ifmcaddr,
|
||||
RTNL_FLAG_DUMP_UNLOCKED);
|
||||
if (err < 0)
|
||||
goto errout;
|
||||
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETANYCAST,
|
||||
NULL, inet6_dump_ifacaddr,
|
||||
RTNL_FLAG_DUMP_UNLOCKED);
|
||||
if (err < 0)
|
||||
goto errout;
|
||||
err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETNETCONF,
|
||||
inet6_netconf_get_devconf,
|
||||
inet6_netconf_dump_devconf,
|
||||
RTNL_FLAG_DOIT_UNLOCKED |
|
||||
RTNL_FLAG_DUMP_UNLOCKED);
|
||||
if (err < 0)
|
||||
goto errout;
|
||||
err = ipv6_addr_label_rtnl_register();
|
||||
if (err < 0)
|
||||
goto errout;
|
||||
|
|
|
|||
|
|
@ -634,23 +634,17 @@ static int ip6addrlbl_get(struct sk_buff *in_skb, struct nlmsghdr *nlh,
|
|||
return err;
|
||||
}
|
||||
|
||||
static const struct rtnl_msg_handler ipv6_adddr_label_rtnl_msg_handlers[] __initconst_or_module = {
|
||||
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_NEWADDRLABEL,
|
||||
.doit = ip6addrlbl_newdel, .flags = RTNL_FLAG_DOIT_UNLOCKED},
|
||||
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_DELADDRLABEL,
|
||||
.doit = ip6addrlbl_newdel, .flags = RTNL_FLAG_DOIT_UNLOCKED},
|
||||
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_GETADDRLABEL,
|
||||
.doit = ip6addrlbl_get, .dumpit = ip6addrlbl_dump,
|
||||
.flags = RTNL_FLAG_DOIT_UNLOCKED | RTNL_FLAG_DUMP_UNLOCKED},
|
||||
};
|
||||
|
||||
int __init ipv6_addr_label_rtnl_register(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_NEWADDRLABEL,
|
||||
ip6addrlbl_newdel,
|
||||
NULL, RTNL_FLAG_DOIT_UNLOCKED);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_DELADDRLABEL,
|
||||
ip6addrlbl_newdel,
|
||||
NULL, RTNL_FLAG_DOIT_UNLOCKED);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETADDRLABEL,
|
||||
ip6addrlbl_get,
|
||||
ip6addrlbl_dump, RTNL_FLAG_DOIT_UNLOCKED |
|
||||
RTNL_FLAG_DUMP_UNLOCKED);
|
||||
return ret;
|
||||
return rtnl_register_many(ipv6_adddr_label_rtnl_msg_handlers);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2493,6 +2493,12 @@ static struct pernet_operations fib6_net_ops = {
|
|||
.exit = fib6_net_exit,
|
||||
};
|
||||
|
||||
static const struct rtnl_msg_handler fib6_rtnl_msg_handlers[] __initconst_or_module = {
|
||||
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_GETROUTE,
|
||||
.dumpit = inet6_dump_fib,
|
||||
.flags = RTNL_FLAG_DUMP_UNLOCKED | RTNL_FLAG_DUMP_SPLIT_NLM_DONE},
|
||||
};
|
||||
|
||||
int __init fib6_init(void)
|
||||
{
|
||||
int ret = -ENOMEM;
|
||||
|
|
@ -2506,9 +2512,7 @@ int __init fib6_init(void)
|
|||
if (ret)
|
||||
goto out_kmem_cache_create;
|
||||
|
||||
ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETROUTE, NULL,
|
||||
inet6_dump_fib, RTNL_FLAG_DUMP_UNLOCKED |
|
||||
RTNL_FLAG_DUMP_SPLIT_NLM_DONE);
|
||||
ret = rtnl_register_many(fib6_rtnl_msg_handlers);
|
||||
if (ret)
|
||||
goto out_unregister_subsys;
|
||||
|
||||
|
|
|
|||
|
|
@ -6680,6 +6680,15 @@ static void bpf_iter_unregister(void)
|
|||
#endif
|
||||
#endif
|
||||
|
||||
static const struct rtnl_msg_handler ip6_route_rtnl_msg_handlers[] __initconst_or_module = {
|
||||
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_NEWROUTE,
|
||||
.doit = inet6_rtm_newroute},
|
||||
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_DELROUTE,
|
||||
.doit = inet6_rtm_delroute},
|
||||
{.owner = THIS_MODULE, .protocol = PF_INET6, .msgtype = RTM_GETROUTE,
|
||||
.doit = inet6_rtm_getroute, .flags = RTNL_FLAG_DOIT_UNLOCKED},
|
||||
};
|
||||
|
||||
int __init ip6_route_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
|
@ -6722,19 +6731,7 @@ int __init ip6_route_init(void)
|
|||
if (ret)
|
||||
goto fib6_rules_init;
|
||||
|
||||
ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_NEWROUTE,
|
||||
inet6_rtm_newroute, NULL, 0);
|
||||
if (ret < 0)
|
||||
goto out_register_late_subsys;
|
||||
|
||||
ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_DELROUTE,
|
||||
inet6_rtm_delroute, NULL, 0);
|
||||
if (ret < 0)
|
||||
goto out_register_late_subsys;
|
||||
|
||||
ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETROUTE,
|
||||
inet6_rtm_getroute, NULL,
|
||||
RTNL_FLAG_DOIT_UNLOCKED);
|
||||
ret = rtnl_register_many(ip6_route_rtnl_msg_handlers);
|
||||
if (ret < 0)
|
||||
goto out_register_late_subsys;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user