Skip to content

Commit

Permalink
neigh: introduce neigh_confirm() helper function
Browse files Browse the repository at this point in the history
Add neigh_confirm() for the confirmed member in struct neighbour,
it can be called as an independent unit by other functions.

Signed-off-by: Yajun Deng <yajun.deng@linux.dev>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Yajun Deng authored and David S. Miller committed Nov 23, 2021
1 parent a0c2ccd commit 1e84dc6
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 25 deletions.
8 changes: 1 addition & 7 deletions include/net/arp.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,7 @@ static inline void __ipv4_confirm_neigh(struct net_device *dev, u32 key)

rcu_read_lock_bh();
n = __ipv4_neigh_lookup_noref(dev, key);
if (n) {
unsigned long now = jiffies;

/* avoid dirtying neighbour */
if (READ_ONCE(n->confirmed) != now)
WRITE_ONCE(n->confirmed, now);
}
neigh_confirm(n);
rcu_read_unlock_bh();
}

Expand Down
16 changes: 2 additions & 14 deletions include/net/ndisc.h
Original file line number Diff line number Diff line change
Expand Up @@ -411,13 +411,7 @@ static inline void __ipv6_confirm_neigh(struct net_device *dev,

rcu_read_lock_bh();
n = __ipv6_neigh_lookup_noref(dev, pkey);
if (n) {
unsigned long now = jiffies;

/* avoid dirtying neighbour */
if (READ_ONCE(n->confirmed) != now)
WRITE_ONCE(n->confirmed, now);
}
neigh_confirm(n);
rcu_read_unlock_bh();
}

Expand All @@ -428,13 +422,7 @@ static inline void __ipv6_confirm_neigh_stub(struct net_device *dev,

rcu_read_lock_bh();
n = __ipv6_neigh_lookup_noref_stub(dev, pkey);
if (n) {
unsigned long now = jiffies;

/* avoid dirtying neighbour */
if (READ_ONCE(n->confirmed) != now)
WRITE_ONCE(n->confirmed, now);
}
neigh_confirm(n);
rcu_read_unlock_bh();
}

Expand Down
11 changes: 11 additions & 0 deletions include/net/neighbour.h
Original file line number Diff line number Diff line change
Expand Up @@ -321,6 +321,17 @@ static inline struct neighbour *__neigh_lookup_noref(struct neigh_table *tbl,
return ___neigh_lookup_noref(tbl, tbl->key_eq, tbl->hash, pkey, dev);
}

static inline void neigh_confirm(struct neighbour *n)
{
if (n) {
unsigned long now = jiffies;

/* avoid dirtying neighbour */
if (READ_ONCE(n->confirmed) != now)
WRITE_ONCE(n->confirmed, now);
}
}

void neigh_table_init(int index, struct neigh_table *tbl);
int neigh_table_clear(int index, struct neigh_table *tbl);
struct neighbour *neigh_lookup(struct neigh_table *tbl, const void *pkey,
Expand Down
5 changes: 1 addition & 4 deletions include/net/sock.h
Original file line number Diff line number Diff line change
Expand Up @@ -2135,13 +2135,10 @@ static inline void sock_confirm_neigh(struct sk_buff *skb, struct neighbour *n)
{
if (skb_get_dst_pending_confirm(skb)) {
struct sock *sk = skb->sk;
unsigned long now = jiffies;

/* avoid dirtying neighbour */
if (READ_ONCE(n->confirmed) != now)
WRITE_ONCE(n->confirmed, now);
if (sk && READ_ONCE(sk->sk_dst_pending_confirm))
WRITE_ONCE(sk->sk_dst_pending_confirm, 0);
neigh_confirm(n);
}
}

Expand Down

0 comments on commit 1e84dc6

Please sign in to comment.