Christoph Paasch 77f99ad16a tcp: metrics: Avoid duplicate entries with the same destination-IP
Because the tcp-metrics is an RCU-list, it may be that two
soft-interrupts are inside __tcp_get_metrics() for the same
destination-IP at the same time. If this destination-IP is not yet part of
the tcp-metrics, both soft-interrupts will end up in tcpm_new and create
a new entry for this IP.
So, we will have two tcp-metrics with the same destination-IP in the list.

This patch checks twice __tcp_get_metrics(). First without holding the
lock, then while holding the lock. The second one is there to confirm
that the entry has not been added by another soft-irq while waiting for
the spin-lock.

Fixes: 51c5d0c4b169b (tcp: Maintain dynamic metrics in local cache.)
Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2014-01-17 18:05:34 -08:00
..
2013-09-03 21:41:43 -04:00
2013-11-14 17:31:14 -05:00
2013-10-08 23:19:24 -04:00
2012-10-08 17:42:36 -04:00
2013-10-19 19:36:19 -04:00
2013-09-03 21:41:43 -04:00
2013-11-29 16:37:36 -05:00
2013-03-21 11:47:50 -04:00
2012-03-11 23:42:51 -07:00
2013-05-31 17:19:05 -07:00