Commit 767e97e1 authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller

neigh: RCU conversion of struct neighbour

This is the second step for neighbour RCU conversion.

(first was commit d6bf7817 : RCU conversion of neigh hash table)

neigh_lookup() becomes lockless, but still take a reference on found
neighbour. (no more read_lock()/read_unlock() on tbl->lock)

struct neighbour gets an additional rcu_head field and is freed after an
RCU grace period.

Future work would need to eventually not take a reference on neighbour
for temporary dst (DST_NOCACHE), but this would need dst->_neighbour to
use a noref bit like we did for skb->_dst.
Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 546add79
...@@ -91,7 +91,7 @@ struct neigh_statistics { ...@@ -91,7 +91,7 @@ struct neigh_statistics {
#define NEIGH_CACHE_STAT_INC(tbl, field) this_cpu_inc((tbl)->stats->field) #define NEIGH_CACHE_STAT_INC(tbl, field) this_cpu_inc((tbl)->stats->field)
struct neighbour { struct neighbour {
struct neighbour *next; struct neighbour __rcu *next;
struct neigh_table *tbl; struct neigh_table *tbl;
struct neigh_parms *parms; struct neigh_parms *parms;
struct net_device *dev; struct net_device *dev;
...@@ -111,6 +111,7 @@ struct neighbour { ...@@ -111,6 +111,7 @@ struct neighbour {
struct sk_buff_head arp_queue; struct sk_buff_head arp_queue;
struct timer_list timer; struct timer_list timer;
const struct neigh_ops *ops; const struct neigh_ops *ops;
struct rcu_head rcu;
u8 primary_key[0]; u8 primary_key[0];
}; };
...@@ -139,7 +140,7 @@ struct pneigh_entry { ...@@ -139,7 +140,7 @@ struct pneigh_entry {
*/ */
struct neigh_hash_table { struct neigh_hash_table {
struct neighbour **hash_buckets; struct neighbour __rcu **hash_buckets;
unsigned int hash_mask; unsigned int hash_mask;
__u32 hash_rnd; __u32 hash_rnd;
struct rcu_head rcu; struct rcu_head rcu;
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment