ndisc: Introduce __ipv6_neigh_lookup_noref().
Subsystems (3)
PATCH 3/13 ndisc: Introduce __ipv6_neigh_lookup_noref().
Signed-off-by YOSHIFUJI Hideaki <[email protected]>
--- include/net/ndisc.h | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)
include/net/ndisc.h +15 -7
@@ -148,14 +148,13 @@ static inline u32 ndisc_hashfn(const void *pkey, const struct net_device *dev, _ (p32[3] * hash_rnd[3])); } -static inline struct neighbour *__ipv6_neigh_lookup (struct net_device *dev,const void *pkey) +static inline struct neighbour *__ipv6_neigh_lookup_noref (struct net_device *dev,const void *pkey) {struct neigh_hash_table *nht;const u32 *p32 = pkey;struct neighbour *n;u32 hash_val; -rcu_read_lock_bh (); nht =rcu_dereference_bh (nd_tbl.nht); hash_val =ndisc_hashfn (pkey, dev, nht->hash_rnd) >> (32 - nht->hash_shift); for (n = rcu_dereference_bh(nht->hash_buckets[hash_val]);
@@ -164,12 +163,21 @@ static inline struct neighbour *__ipv6_neigh_lookup(struct net_device *dev, consu32 *n32 = (u32 *) n->primary_key;if (n->dev == dev && ((n32[0 ] ^ p32[0 ]) | (n32[1 ] ^ p32[1 ]) | - (n32[2 ] ^ p32[2 ]) | (n32[3 ] ^ p32[3 ])) ==0 ) { -if (!atomic_inc_not_zero (&n->refcnt)) - n =NULL ; -break ; - } + (n32[2 ] ^ p32[2 ]) | (n32[3 ] ^ p32[3 ])) ==0 ) +return n; } + +return NULL ; +} + +static inline struct neighbour *__ipv6_neigh_lookup (struct net_device *dev,const void *pkey) +{ +struct neighbour *n; + +rcu_read_lock_bh (); + n =__ipv6_neigh_lookup_noref (dev, pkey); +if (n && !atomic_inc_not_zero (&n->refcnt)) + n =NULL ;rcu_read_unlock_bh ();return n;
Signature · 1 line
1.7.9.5