With counters fro neigh entries per VE introduced in https://virtuozzo.atlassian.net/browse/PSBM-87155 tbl->entries, which served as limit of hashtable size, become unlimited, so the table can grow very large.
Table is allocated via __get_free_pages which allocates continious regions of phys mem and large order allocations are very likely to fail - which was observed in the issue. To address this limit the allocation order to 5. Fixes: 019712d0d37d (ve/net/neighbour: per-ct limit for neighbour entries) https://virtuozzo.atlassian.net/browse/PSBM-153199 Signed-off-by: Alexander Atanasov <alexander.atana...@virtuozzo.com> --- net/core/neighbour.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/net/core/neighbour.c b/net/core/neighbour.c index c33105d0614bb..b3517ca7da499 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c @@ -735,7 +735,13 @@ ___neigh_create(struct neigh_table *tbl, const void *pkey, nht = rcu_dereference_protected(tbl->nht, lockdep_is_held(&tbl->lock)); - if (atomic_read(&tbl->entries) > (1 << nht->hash_shift)) + /* + * Since entries can grow unlimited we limit the size of the hash table + * here. __get_free_pages allocates continious regions of phys mem + * and orders above 10 are very hard to satisfy. We limit the size to 5 + * as it is the middle ground + */ + if (nht->hash_shift < 5 && atomic_read(&tbl->entries) > (1 << nht->hash_shift)) nht = neigh_hash_grow(tbl, nht->hash_shift + 1); hash_val = tbl->hash(n->primary_key, dev, nht->hash_rnd) >> (32 - nht->hash_shift); -- 2.39.3 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel