Message ID | 20240618193914.561782-1-kuba@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 02a176d42a88805b3520148a4eee28b0760cd8c0 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] ipv6: bring NLM_DONE out to a separate recv() again | expand |
On 6/18/24 21:39, Jakub Kicinski wrote: > Commit under Fixes optimized the number of recv() calls > needed during RTM_GETROUTE dumps, but we got multiple > reports of applications hanging on recv() calls. > Applications expect that a route dump will be terminated > with a recv() reading an individual NLM_DONE message. > > Coalescing NLM_DONE is perfectly legal in netlink, > but even tho reporters fixed the code in respective > projects, chances are it will take time for those > applications to get updated. So revert to old behavior > (for now)? > > This is an IPv6 version of commit 460b0d33cf10 ("inet: bring > NLM_DONE out to a separate recv() again"). > > Reported-by: Maciej Żenczykowski <zenczykowski@gmail.com> > Link: https://lore.kernel.org/all/CANP3RGc1RG71oPEBXNx_WZFP9AyphJefdO4paczN92n__ds4ow@mail.gmail.com > Reported-by: Stefano Brivio <sbrivio@redhat.com> > Link: https://lore.kernel.org/all/20240315124808.033ff58d@elisabeth > Reported-by: Ilya Maximets <i.maximets@ovn.org> > Link: https://lore.kernel.org/all/02b50aae-f0e9-47a4-8365-a977a85975d3@ovn.org > Fixes: 5fc68320c1fb ("ipv6: remove RTNL protection from inet6_dump_fib()") > Signed-off-by: Jakub Kicinski <kuba@kernel.org> > --- > CC: dsahern@kernel.org > CC: donald.hunter@gmail.com > CC: maze@google.com > --- > net/ipv6/ip6_fib.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c > index d9c9a542a414..eb111d20615c 100644 > --- a/net/ipv6/ip6_fib.c > +++ b/net/ipv6/ip6_fib.c > @@ -2514,7 +2514,8 @@ int __init fib6_init(void) > goto out_kmem_cache_create; > > ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETROUTE, NULL, > - inet6_dump_fib, RTNL_FLAG_DUMP_UNLOCKED); > + inet6_dump_fib, RTNL_FLAG_DUMP_UNLOCKED | > + RTNL_FLAG_DUMP_SPLIT_NLM_DONE); > if (ret) > goto out_unregister_subsys; > Thanks, Jakub! LGTM. Libreswan in OVS tests is working fine with this change on top of 6.10-rc4. The rest of the test suite is also working fine (except for FTP conntrack, but that's an unrelated issue). Tested-by: Ilya Maximets <i.maximets@ovn.org>
Hello: This patch was applied to netdev/net.git (main) by Jakub Kicinski <kuba@kernel.org>: On Tue, 18 Jun 2024 12:39:14 -0700 you wrote: > Commit under Fixes optimized the number of recv() calls > needed during RTM_GETROUTE dumps, but we got multiple > reports of applications hanging on recv() calls. > Applications expect that a route dump will be terminated > with a recv() reading an individual NLM_DONE message. > > Coalescing NLM_DONE is perfectly legal in netlink, > but even tho reporters fixed the code in respective > projects, chances are it will take time for those > applications to get updated. So revert to old behavior > (for now)? > > [...] Here is the summary with links: - [net] ipv6: bring NLM_DONE out to a separate recv() again https://git.kernel.org/netdev/net/c/02a176d42a88 You are awesome, thank you!
diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c index d9c9a542a414..eb111d20615c 100644 --- a/net/ipv6/ip6_fib.c +++ b/net/ipv6/ip6_fib.c @@ -2514,7 +2514,8 @@ int __init fib6_init(void) goto out_kmem_cache_create; ret = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETROUTE, NULL, - inet6_dump_fib, RTNL_FLAG_DUMP_UNLOCKED); + inet6_dump_fib, RTNL_FLAG_DUMP_UNLOCKED | + RTNL_FLAG_DUMP_SPLIT_NLM_DONE); if (ret) goto out_unregister_subsys;
Commit under Fixes optimized the number of recv() calls needed during RTM_GETROUTE dumps, but we got multiple reports of applications hanging on recv() calls. Applications expect that a route dump will be terminated with a recv() reading an individual NLM_DONE message. Coalescing NLM_DONE is perfectly legal in netlink, but even tho reporters fixed the code in respective projects, chances are it will take time for those applications to get updated. So revert to old behavior (for now)? This is an IPv6 version of commit 460b0d33cf10 ("inet: bring NLM_DONE out to a separate recv() again"). Reported-by: Maciej Żenczykowski <zenczykowski@gmail.com> Link: https://lore.kernel.org/all/CANP3RGc1RG71oPEBXNx_WZFP9AyphJefdO4paczN92n__ds4ow@mail.gmail.com Reported-by: Stefano Brivio <sbrivio@redhat.com> Link: https://lore.kernel.org/all/20240315124808.033ff58d@elisabeth Reported-by: Ilya Maximets <i.maximets@ovn.org> Link: https://lore.kernel.org/all/02b50aae-f0e9-47a4-8365-a977a85975d3@ovn.org Fixes: 5fc68320c1fb ("ipv6: remove RTNL protection from inet6_dump_fib()") Signed-off-by: Jakub Kicinski <kuba@kernel.org> --- CC: dsahern@kernel.org CC: donald.hunter@gmail.com CC: maze@google.com --- net/ipv6/ip6_fib.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)