Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ipmr: Use rtnl_register_many().

We will remove rtnl_register() and rtnl_register_module() in favour
of rtnl_register_many().

When it succeeds for built-in callers, rtnl_register_many() guarantees
all rtnetlink types in the passed array are supported, and there is no
chance that a part of message types is not supported.

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-9-kuniyu@amazon.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Kuniyuki Iwashima and committed by
Jakub Kicinski
3ac84e31 a37b0e4e

+21 -12
+12 -8
net/ipv4/ipmr.c
··· 3137 3137 .exit_batch = ipmr_net_exit_batch, 3138 3138 }; 3139 3139 3140 + static const struct rtnl_msg_handler ipmr_rtnl_msg_handlers[] __initconst = { 3141 + {.protocol = RTNL_FAMILY_IPMR, .msgtype = RTM_GETLINK, 3142 + .dumpit = ipmr_rtm_dumplink}, 3143 + {.protocol = RTNL_FAMILY_IPMR, .msgtype = RTM_NEWROUTE, 3144 + .doit = ipmr_rtm_route}, 3145 + {.protocol = RTNL_FAMILY_IPMR, .msgtype = RTM_DELROUTE, 3146 + .doit = ipmr_rtm_route}, 3147 + {.protocol = RTNL_FAMILY_IPMR, .msgtype = RTM_GETROUTE, 3148 + .doit = ipmr_rtm_getroute, .dumpit = ipmr_rtm_dumproute}, 3149 + }; 3150 + 3140 3151 int __init ip_mr_init(void) 3141 3152 { 3142 3153 int err; ··· 3168 3157 goto add_proto_fail; 3169 3158 } 3170 3159 #endif 3171 - rtnl_register(RTNL_FAMILY_IPMR, RTM_GETROUTE, 3172 - ipmr_rtm_getroute, ipmr_rtm_dumproute, 0); 3173 - rtnl_register(RTNL_FAMILY_IPMR, RTM_NEWROUTE, 3174 - ipmr_rtm_route, NULL, 0); 3175 - rtnl_register(RTNL_FAMILY_IPMR, RTM_DELROUTE, 3176 - ipmr_rtm_route, NULL, 0); 3160 + rtnl_register_many(ipmr_rtnl_msg_handlers); 3177 3161 3178 - rtnl_register(RTNL_FAMILY_IPMR, RTM_GETLINK, 3179 - NULL, ipmr_rtm_dumplink, 0); 3180 3162 return 0; 3181 3163 3182 3164 #ifdef CONFIG_IP_PIMSM_V2
+9 -4
net/ipv6/ip6mr.c
··· 1367 1367 .exit_batch = ip6mr_net_exit_batch, 1368 1368 }; 1369 1369 1370 + static const struct rtnl_msg_handler ip6mr_rtnl_msg_handlers[] __initconst_or_module = { 1371 + {.owner = THIS_MODULE, .protocol = RTNL_FAMILY_IP6MR, 1372 + .msgtype = RTM_GETROUTE, 1373 + .doit = ip6mr_rtm_getroute, .dumpit = ip6mr_rtm_dumproute}, 1374 + }; 1375 + 1370 1376 int __init ip6_mr_init(void) 1371 1377 { 1372 1378 int err; ··· 1395 1389 goto add_proto_fail; 1396 1390 } 1397 1391 #endif 1398 - err = rtnl_register_module(THIS_MODULE, RTNL_FAMILY_IP6MR, RTM_GETROUTE, 1399 - ip6mr_rtm_getroute, ip6mr_rtm_dumproute, 0); 1400 - if (err == 0) 1392 + err = rtnl_register_many(ip6mr_rtnl_msg_handlers); 1393 + if (!err) 1401 1394 return 0; 1402 1395 1403 1396 #ifdef CONFIG_IPV6_PIMSM_V2 ··· 1413 1408 1414 1409 void ip6_mr_cleanup(void) 1415 1410 { 1416 - rtnl_unregister(RTNL_FAMILY_IP6MR, RTM_GETROUTE); 1411 + rtnl_unregister_many(ip6mr_rtnl_msg_handlers); 1417 1412 #ifdef CONFIG_IPV6_PIMSM_V2 1418 1413 inet6_del_protocol(&pim6_protocol, IPPROTO_PIM); 1419 1414 #endif