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:
committed by
David S. Miller
parent
110b249937
commit
d6bf781712
@@ -48,7 +48,6 @@
|
||||
#include <net/dn_neigh.h>
|
||||
#include <net/dn_route.h>
|
||||
|
||||
static u32 dn_neigh_hash(const void *pkey, const struct net_device *dev);
|
||||
static int dn_neigh_construct(struct neighbour *);
|
||||
static void dn_long_error_report(struct neighbour *, struct sk_buff *);
|
||||
static void dn_short_error_report(struct neighbour *, struct sk_buff *);
|
||||
@@ -93,6 +92,13 @@ static const struct neigh_ops dn_phase3_ops = {
|
||||
.queue_xmit = dev_queue_xmit
|
||||
};
|
||||
|
||||
static u32 dn_neigh_hash(const void *pkey,
|
||||
const struct net_device *dev,
|
||||
__u32 hash_rnd)
|
||||
{
|
||||
return jhash_2words(*(__u16 *)pkey, 0, hash_rnd);
|
||||
}
|
||||
|
||||
struct neigh_table dn_neigh_table = {
|
||||
.family = PF_DECnet,
|
||||
.entry_size = sizeof(struct dn_neigh),
|
||||
@@ -122,11 +128,6 @@ struct neigh_table dn_neigh_table = {
|
||||
.gc_thresh3 = 1024,
|
||||
};
|
||||
|
||||
static u32 dn_neigh_hash(const void *pkey, const struct net_device *dev)
|
||||
{
|
||||
return jhash_2words(*(__u16 *)pkey, 0, dn_neigh_table.hash_rnd);
|
||||
}
|
||||
|
||||
static int dn_neigh_construct(struct neighbour *neigh)
|
||||
{
|
||||
struct net_device *dev = neigh->dev;
|
||||
|
Reference in New Issue
Block a user