Created
May 10, 2016 21:25
-
-
Save logikal/0b966d3aadb58b6004a0456089da04f4 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@@ -290,15 +290,7 @@ static struct neighbour *neigh_alloc(struct neigh_table *tbl, struct net_device | |
goto out_entries; | |
} | |
- if (tbl->entry_size) | |
- n = kzalloc(tbl->entry_size, GFP_ATOMIC); | |
- else { | |
- int sz = sizeof(*n) + tbl->key_len; | |
- | |
- sz = ALIGN(sz, NEIGH_PRIV_ALIGN); | |
- sz += dev->neigh_priv_len; | |
- n = kzalloc(sz, GFP_ATOMIC); | |
- } | |
+ n = kzalloc(tbl->entry_size + dev->neigh_priv_len, GFP_ATOMIC); | |
if (!n) | |
goto out_entries; | |
@@ -778,6 +770,9 @@ 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 | |
*/ | |
@@ -832,6 +827,7 @@ next_elt: | |
nht = rcu_dereference_protected(tbl->nht, | |
lockdep_is_held(&tbl->lock)); | |
} | |
+out: | |
/* Cycle through all hash buckets every base_reachable_time/2 ticks. | |
* ARP entry timeouts range from 1/2 base_reachable_time to 3/2 | |
* base_reachable_time. | |
@@ -1542,6 +1538,12 @@ static void neigh_table_init_no_netlink(struct neigh_table *tbl) | |
if (!tbl->nht || !tbl->phash_buckets) | |
panic("cannot allocate neighbour cache hashes"); | |
+ if (!tbl->entry_size) | |
+ tbl->entry_size = ALIGN(offsetof(struct neighbour, primary_key) + | |
+ tbl->key_len, NEIGH_PRIV_ALIGN); | |
+ else | |
+ WARN_ON(tbl->entry_size % NEIGH_PRIV_ALIGN); | |
+ | |
rwlock_init(&tbl->lock); | |
INIT_DEFERRABLE_WORK(&tbl->gc_work, neigh_periodic_work); | |
schedule_delayed_work(&tbl->gc_work, tbl->parms.reachable_time); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment