Message ID | 20240426070202.1267739-1-edumazet@google.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 61f5338d62673379ff2ce5a8c05682658a196980 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next] inet: use call_rcu_hurry() in inet_free_ifa() | expand |
On 4/26/24 1:02 AM, Eric Dumazet wrote: > This is a followup of commit c4e86b4363ac ("net: add two more > call_rcu_hurry()") > > Our reference to ifa->ifa_dev must be freed ASAP > to release the reference to the netdev the same way. > > inet_rcu_free_ifa() > > in_dev_put() > -> in_dev_finish_destroy() > -> netdev_put() > > This should speedup device/netns dismantles when CONFIG_RCU_LAZY=y > > Signed-off-by: Eric Dumazet <edumazet@google.com> > --- > net/ipv4/devinet.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > Reviewed-by: David Ahern <dsahern@kernel.org>
Hello: This patch was applied to netdev/net-next.git (main) by David S. Miller <davem@davemloft.net>: On Fri, 26 Apr 2024 07:02:02 +0000 you wrote: > This is a followup of commit c4e86b4363ac ("net: add two more > call_rcu_hurry()") > > Our reference to ifa->ifa_dev must be freed ASAP > to release the reference to the netdev the same way. > > inet_rcu_free_ifa() > > [...] Here is the summary with links: - [net-next] inet: use call_rcu_hurry() in inet_free_ifa() https://git.kernel.org/netdev/net-next/c/61f5338d6267 You are awesome, thank you!
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index 7592f242336b7fdf67e79dbd75407cf03e841cfc..364dbf0cd9bf2f6e96a221317c88dad965209659 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c @@ -224,6 +224,7 @@ static struct in_ifaddr *inet_alloc_ifa(void) static void inet_rcu_free_ifa(struct rcu_head *head) { struct in_ifaddr *ifa = container_of(head, struct in_ifaddr, rcu_head); + if (ifa->ifa_dev) in_dev_put(ifa->ifa_dev); kfree(ifa); @@ -231,7 +232,11 @@ static void inet_rcu_free_ifa(struct rcu_head *head) static void inet_free_ifa(struct in_ifaddr *ifa) { - call_rcu(&ifa->rcu_head, inet_rcu_free_ifa); + /* Our reference to ifa->ifa_dev must be freed ASAP + * to release the reference to the netdev the same way. + * in_dev_put() -> in_dev_finish_destroy() -> netdev_put() + */ + call_rcu_hurry(&ifa->rcu_head, inet_rcu_free_ifa); } static void in_dev_free_rcu(struct rcu_head *head)
This is a followup of commit c4e86b4363ac ("net: add two more call_rcu_hurry()") Our reference to ifa->ifa_dev must be freed ASAP to release the reference to the netdev the same way. inet_rcu_free_ifa() in_dev_put() -> in_dev_finish_destroy() -> netdev_put() This should speedup device/netns dismantles when CONFIG_RCU_LAZY=y Signed-off-by: Eric Dumazet <edumazet@google.com> --- net/ipv4/devinet.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)