diff --git a/lib/rhashtable.c b/lib/rhashtable.c index 5f8fe3e8821988d0014ffa07ca4cd2ab3a03e8d8..e75c48d9d82f61b4e248b22d49bf3c55fa42acbb 100644 --- a/lib/rhashtable.c +++ b/lib/rhashtable.c @@ -933,8 +933,6 @@ int rhashtable_init(struct rhashtable *ht, struct rhashtable_params *params) if (params->nulls_base && params->nulls_base < (1U << RHT_BASE_SHIFT)) return -EINVAL; - params->min_size = max(params->min_size, HASH_MIN_SIZE); - if (params->nelem_hint) size = rounded_hashtable_size(params); @@ -942,6 +940,14 @@ int rhashtable_init(struct rhashtable *ht, struct rhashtable_params *params) mutex_init(&ht->mutex); memcpy(&ht->p, params, sizeof(*params)); + if (params->min_size) + ht->p.min_size = roundup_pow_of_two(params->min_size); + + if (params->max_size) + ht->p.max_size = rounddown_pow_of_two(params->max_size); + + ht->p.min_size = max(params->min_size, HASH_MIN_SIZE); + if (params->locks_mul) ht->p.locks_mul = roundup_pow_of_two(params->locks_mul); else