|
@@ -964,8 +964,16 @@ EXPORT_SYMBOL_GPL(rhashtable_walk_stop);
|
|
|
|
|
|
static size_t rounded_hashtable_size(const struct rhashtable_params *params)
|
|
|
{
|
|
|
- return max(roundup_pow_of_two(params->nelem_hint * 4 / 3),
|
|
|
- (unsigned long)params->min_size);
|
|
|
+ size_t retsize;
|
|
|
+
|
|
|
+ if (params->nelem_hint)
|
|
|
+ retsize = max(roundup_pow_of_two(params->nelem_hint * 4 / 3),
|
|
|
+ (unsigned long)params->min_size);
|
|
|
+ else
|
|
|
+ retsize = max(HASH_DEFAULT_SIZE,
|
|
|
+ (unsigned long)params->min_size);
|
|
|
+
|
|
|
+ return retsize;
|
|
|
}
|
|
|
|
|
|
static u32 rhashtable_jhash2(const void *key, u32 length, u32 seed)
|
|
@@ -1022,8 +1030,6 @@ int rhashtable_init(struct rhashtable *ht,
|
|
|
struct bucket_table *tbl;
|
|
|
size_t size;
|
|
|
|
|
|
- size = HASH_DEFAULT_SIZE;
|
|
|
-
|
|
|
if ((!params->key_len && !params->obj_hashfn) ||
|
|
|
(params->obj_hashfn && !params->obj_cmpfn))
|
|
|
return -EINVAL;
|
|
@@ -1050,8 +1056,7 @@ int rhashtable_init(struct rhashtable *ht,
|
|
|
|
|
|
ht->p.min_size = max_t(u16, ht->p.min_size, HASH_MIN_SIZE);
|
|
|
|
|
|
- if (params->nelem_hint)
|
|
|
- size = rounded_hashtable_size(&ht->p);
|
|
|
+ size = rounded_hashtable_size(&ht->p);
|
|
|
|
|
|
if (params->locks_mul)
|
|
|
ht->p.locks_mul = roundup_pow_of_two(params->locks_mul);
|