ipv4: take rt_uncached_lock only if needed
Multicast traffic allocates dst with DST_NOCACHE, but dst is not inserted into rt_uncached_list. This slowdown multicast workloads on SMP because rt_uncached_lock is contended. Change the test before taking the lock to actually check the dst was inserted into rt_uncached_list. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a0dfb2634e
commit
78df76a065
|
@ -1263,7 +1263,7 @@ static void ipv4_dst_destroy(struct dst_entry *dst)
|
|||
{
|
||||
struct rtable *rt = (struct rtable *) dst;
|
||||
|
||||
if (dst->flags & DST_NOCACHE) {
|
||||
if (!list_empty(&rt->rt_uncached)) {
|
||||
spin_lock_bh(&rt_uncached_lock);
|
||||
list_del(&rt->rt_uncached);
|
||||
spin_unlock_bh(&rt_uncached_lock);
|
||||
|
|
Loading…
Reference in New Issue