diff options
-rw-r--r-- | lib/rhashtable.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/lib/rhashtable.c b/lib/rhashtable.c index 751630bbe409..3895486ef551 100644 --- a/lib/rhashtable.c +++ b/lib/rhashtable.c | |||
@@ -958,13 +958,14 @@ int rhashtable_init(struct rhashtable *ht, | |||
958 | if (params->min_size) | 958 | if (params->min_size) |
959 | ht->p.min_size = roundup_pow_of_two(params->min_size); | 959 | ht->p.min_size = roundup_pow_of_two(params->min_size); |
960 | 960 | ||
961 | if (params->max_size) | ||
962 | ht->p.max_size = rounddown_pow_of_two(params->max_size); | ||
963 | |||
964 | /* Cap total entries at 2^31 to avoid nelems overflow. */ | 961 | /* Cap total entries at 2^31 to avoid nelems overflow. */ |
965 | ht->max_elems = 1u << 31; | 962 | ht->max_elems = 1u << 31; |
966 | if (ht->p.max_size < ht->max_elems / 2) | 963 | |
967 | ht->max_elems = ht->p.max_size * 2; | 964 | if (params->max_size) { |
965 | ht->p.max_size = rounddown_pow_of_two(params->max_size); | ||
966 | if (ht->p.max_size < ht->max_elems / 2) | ||
967 | ht->max_elems = ht->p.max_size * 2; | ||
968 | } | ||
968 | 969 | ||
969 | ht->p.min_size = max(ht->p.min_size, HASH_MIN_SIZE); | 970 | ht->p.min_size = max(ht->p.min_size, HASH_MIN_SIZE); |
970 | 971 | ||