]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
neighbour: Use RCU list helpers for neigh_parms.list writers.
authorKuniyuki Iwashima <kuniyu@google.com>
Wed, 22 Oct 2025 05:39:45 +0000 (05:39 +0000)
committerJakub Kicinski <kuba@kernel.org>
Sat, 25 Oct 2025 00:57:20 +0000 (17:57 -0700)
We will convert RTM_GETNEIGHTBL to RCU soon, where we traverse
tbl->parms_list under RCU in neightbl_dump_info().

Let's use RCU list helper for neigh_parms in neigh_parms_alloc()
and neigh_parms_release().

neigh_table_init() uses the plain list_add() for the default
neigh_parm that is embedded in the table and not yet published.

Note that neigh_parms_release() already uses call_rcu() to free
neigh_parms.

Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20251022054004.2514876-2-kuniyu@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/neighbour.c

index bddfa389effa774b8f0427b8fe92ad559f4ada11..98428f60731bd008109c38378294fe605b435a39 100644 (file)
@@ -1764,7 +1764,7 @@ struct neigh_parms *neigh_parms_alloc(struct net_device *dev,
                }
 
                write_lock_bh(&tbl->lock);
-               list_add(&p->list, &tbl->parms.list);
+               list_add_rcu(&p->list, &tbl->parms.list);
                write_unlock_bh(&tbl->lock);
 
                neigh_parms_data_state_cleanall(p);
@@ -1786,7 +1786,7 @@ void neigh_parms_release(struct neigh_table *tbl, struct neigh_parms *parms)
        if (!parms || parms == &tbl->parms)
                return;
        write_lock_bh(&tbl->lock);
-       list_del(&parms->list);
+       list_del_rcu(&parms->list);
        parms->dead = 1;
        write_unlock_bh(&tbl->lock);
        netdev_put(parms->dev, &parms->dev_tracker);