mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 14:41:27 +00:00
net neigh: RCU conversion of neigh hash table
David This is the first step for RCU conversion of neigh code. Next patches will convert hash_buckets[] and "struct neighbour" to RCU protected objects. Thanks [PATCH net-next] net neigh: RCU conversion of neigh hash table Instead of storing hash_buckets, hash_mask and hash_rnd in "struct neigh_table", a new structure is defined : struct neigh_hash_table { struct neighbour **hash_buckets; unsigned int hash_mask; __u32 hash_rnd; struct rcu_head rcu; }; And "struct neigh_table" has an RCU protected pointer to such a neigh_hash_table. This means the signature of (*hash)() function changed: We need to add a third parameter with the actual hash_rnd value, since this is not anymore a neigh_table field. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
110b249937
commit
d6bf781712
6 changed files with 170 additions and 100 deletions
|
@ -138,13 +138,22 @@ struct pneigh_entry {
|
|||
* neighbour table manipulation
|
||||
*/
|
||||
|
||||
struct neigh_hash_table {
|
||||
struct neighbour **hash_buckets;
|
||||
unsigned int hash_mask;
|
||||
__u32 hash_rnd;
|
||||
struct rcu_head rcu;
|
||||
};
|
||||
|
||||
|
||||
struct neigh_table {
|
||||
struct neigh_table *next;
|
||||
int family;
|
||||
int entry_size;
|
||||
int key_len;
|
||||
__u32 (*hash)(const void *pkey, const struct net_device *);
|
||||
__u32 (*hash)(const void *pkey,
|
||||
const struct net_device *dev,
|
||||
__u32 hash_rnd);
|
||||
int (*constructor)(struct neighbour *);
|
||||
int (*pconstructor)(struct pneigh_entry *);
|
||||
void (*pdestructor)(struct pneigh_entry *);
|
||||
|
@ -165,9 +174,7 @@ struct neigh_table {
|
|||
unsigned long last_rand;
|
||||
struct kmem_cache *kmem_cachep;
|
||||
struct neigh_statistics __percpu *stats;
|
||||
struct neighbour **hash_buckets;
|
||||
unsigned int hash_mask;
|
||||
__u32 hash_rnd;
|
||||
struct neigh_hash_table __rcu *nht;
|
||||
struct pneigh_entry **phash_buckets;
|
||||
};
|
||||
|
||||
|
@ -237,6 +244,7 @@ extern void pneigh_for_each(struct neigh_table *tbl, void (*cb)(struct pneigh_en
|
|||
struct neigh_seq_state {
|
||||
struct seq_net_private p;
|
||||
struct neigh_table *tbl;
|
||||
struct neigh_hash_table *nht;
|
||||
void *(*neigh_sub_iter)(struct neigh_seq_state *state,
|
||||
struct neighbour *n, loff_t *pos);
|
||||
unsigned int bucket;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue