diff options
| author | Eric Dumazet <edumazet@google.com> | 2026-05-25 08:35:39 +0000 |
|---|---|---|
| committer | Jakub Kicinski <kuba@kernel.org> | 2026-05-26 19:20:15 -0700 |
| commit | 00888feb601497a58ed363aae13be01b55d8a028 (patch) | |
| tree | c7ecd95ab35da76ca72ca49f4ae3d707068eae5a /net | |
| parent | 73a7c8fb2302ae78920b210c098b752b9caa6bf6 (diff) | |
| download | linux-next-history-00888feb601497a58ed363aae13be01b55d8a028.tar.gz | |
net: defer netdev_name_node_alt_flush() call to netdev_run_todo()
In the following patch, we want to call rtnl_fill_prop_list() without
RTNL being held, but after a device reference was taken.
We need to free altnames in netdev_run_todo() instead of
unregister_netdevice_many_notify().
Freeing will only happen once all device references
have been released.
Note that dev->name_node serves as the anchor for altnames,
thus must be also freed in netdev_run_todo().
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
Link: https://patch.msgid.link/20260525083542.1565964-3-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net')
| -rw-r--r-- | net/core/dev.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index a50cd68c6bfa2..804e8ad25010e 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -11730,6 +11730,8 @@ void netdev_run_todo(void) WARN_ON(rcu_access_pointer(dev->ip_ptr)); WARN_ON(rcu_access_pointer(dev->ip6_ptr)); + netdev_name_node_alt_flush(dev); + netdev_name_node_free(dev->name_node); netdev_do_free_pcpu_stats(dev); if (dev->priv_destructor) dev->priv_destructor(dev); @@ -12443,8 +12445,6 @@ void unregister_netdevice_many_notify(struct list_head *head, dev_uc_flush(dev); dev_mc_flush(dev); - netdev_name_node_alt_flush(dev); - netdev_name_node_free(dev->name_node); netdev_rss_contexts_free(dev); |
