summaryrefslogtreecommitdiff
path: root/net/core
diff options
context:
space:
mode:
authorDuan Jiong <duanj.fnst@cn.fujitsu.com>2014-02-27 17:14:41 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-03-23 21:38:10 -0700
commit913cfa947d296bd0a0671e87f102a49c24683fd8 (patch)
treec1e3eabe018ed6be85922cd86c3486a0451f7a17 /net/core
parentfe42b170afae5978dc90641f29f2b39aefaa47fa (diff)
downloadlinux-3.10-913cfa947d296bd0a0671e87f102a49c24683fd8.tar.gz
linux-3.10-913cfa947d296bd0a0671e87f102a49c24683fd8.tar.bz2
linux-3.10-913cfa947d296bd0a0671e87f102a49c24683fd8.zip
neigh: recompute reachabletime before returning from neigh_periodic_work()
[ Upstream commit feff9ab2e7fa773b6a3965f77375fe89f7fd85cf ] If the neigh table's entries is less than gc_thresh1, the function will return directly, and the reachabletime will not be recompute, so the reachabletime can be guessed. Signed-off-by: Duan Jiong <duanj.fnst@cn.fujitsu.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'net/core')
-rw-r--r--net/core/neighbour.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index 49aeab86f31..b49e8bafab1 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -764,9 +764,6 @@ static void neigh_periodic_work(struct work_struct *work)
nht = rcu_dereference_protected(tbl->nht,
lockdep_is_held(&tbl->lock));
- if (atomic_read(&tbl->entries) < tbl->gc_thresh1)
- goto out;
-
/*
* periodically recompute ReachableTime from random function
*/
@@ -779,6 +776,9 @@ static void neigh_periodic_work(struct work_struct *work)
neigh_rand_reach_time(p->base_reachable_time);
}
+ if (atomic_read(&tbl->entries) < tbl->gc_thresh1)
+ goto out;
+
for (i = 0 ; i < (1 << nht->hash_shift); i++) {
np = &nht->hash_buckets[i];