]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
ipv6: Use rtnl_register_many().
authorKuniyuki Iwashima <kuniyu@amazon.com>
Mon, 14 Oct 2024 20:18:24 +0000 (13:18 -0700)
committerJakub Kicinski <kuba@kernel.org>
Wed, 16 Oct 2024 01:52:26 +0000 (18:52 -0700)
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>
net/ipv6/addrconf.c
net/ipv6/addrlabel.c
net/ipv6/ip6_fib.c
net/ipv6/route.c

index f31528d4f694e42032276ddd6230b23911c480b5..ac8645ad2537fe9265eff3ceb7ca27af27099c23 100644 (file)
@@ -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;
index acd70b5992a7b9c1aadcfb9a279da7fe6aebfed9..ab054f329e12df6e4bd5d708fec8f54ba445f9f4 100644 (file)
@@ -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);
 }
index c9da10d971fa7046f08edd712f16ce188ce1f915..6383263bfd0465522063ddc601e9d80609a8094a 100644 (file)
@@ -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;
 
index b4251915585f75ff4ae2038befda9efd09bc5887..d7ce5cf2017a5792187ca61fc6089024f09618ab 100644 (file)
@@ -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;