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 | ||
