]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - lib/rhashtable.c
Merge tag 'platform-drivers-x86-v4.12-1' of git://git.infradead.org/linux-platform...
[linux.git] / lib / rhashtable.c
index f8635fd5744259431305b73599949011d67a78b0..a930e436db5d8ff6b3e4959ae60761607bcd47cc 100644 (file)
@@ -535,7 +535,7 @@ static void *rhashtable_lookup_one(struct rhashtable *ht,
        struct rhash_head *head;
        int elasticity;
 
-       elasticity = ht->elasticity;
+       elasticity = RHT_ELASTICITY;
        pprev = rht_bucket_var(tbl, hash);
        rht_for_each_continue(head, *pprev, tbl, hash) {
                struct rhlist_head *list;
@@ -958,35 +958,20 @@ int rhashtable_init(struct rhashtable *ht,
        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);
+       /* Cap total entries at 2^31 to avoid nelems overflow. */
+       ht->max_elems = 1u << 31;
 
-       if (params->insecure_max_entries)
-               ht->p.insecure_max_entries =
-                       rounddown_pow_of_two(params->insecure_max_entries);
-       else
-               ht->p.insecure_max_entries = ht->p.max_size * 2;
+       if (params->max_size) {
+               ht->p.max_size = rounddown_pow_of_two(params->max_size);
+               if (ht->p.max_size < ht->max_elems / 2)
+                       ht->max_elems = ht->p.max_size * 2;
+       }
 
-       ht->p.min_size = max(ht->p.min_size, HASH_MIN_SIZE);
+       ht->p.min_size = max_t(u16, ht->p.min_size, HASH_MIN_SIZE);
 
        if (params->nelem_hint)
                size = rounded_hashtable_size(&ht->p);
 
-       /* The maximum (not average) chain length grows with the
-        * size of the hash table, at a rate of (log N)/(log log N).
-        * The value of 16 is selected so that even if the hash
-        * table grew to 2^32 you would not expect the maximum
-        * chain length to exceed it unless we are under attack
-        * (or extremely unlucky).
-        *
-        * As this limit is only to detect attacks, we don't need
-        * to set it to a lower value as you'd need the chain
-        * length to vastly exceed 16 to have any real effect
-        * on the system.
-        */
-       if (!params->insecure_elasticity)
-               ht->elasticity = 16;
-
        if (params->locks_mul)
                ht->p.locks_mul = roundup_pow_of_two(params->locks_mul);
        else