Skip to contentSkip to conversation

Patch "rhashtable: Enforce minimum size on initial hash table" has been added to the 4.1-stable tree

PATCH [email protected] 1 participant 1 message Dec 31, 2015

Subsystems (3)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

rhashtable: Enforce minimum size on initial hash table

to the 4.1-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
rhashtable-enforce-minimum-size-on-initial-hash-table.patch
and it can be found in the queue-4.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From foo@baz Wed Dec 30 19:52:45 PST 2015

From: Herbert Xu <[email protected]>
Date: Wed, 16 Dec 2015 18:13:14 +0800
Subject: rhashtable: Enforce minimum size on initial hash table

From: Herbert Xu <[email protected]>

[ Upstream commit 3a324606bbabfc30084ce9d08169910773ba9a92 ]

Quoted 5 lines · William Hua

I wasn't aware there was an enforced minimum size. I simply set the nelem_hint in the rhastable_params struct to 1, expecting it to grow as needed. This caused a segfault afterwards when trying to insert an element.

OK we're doing the size computation before we enforce the limit on min_size.

---8<---
We need to do the initial hash table size computation after we have obtained the correct min_size/max_size parameters. Otherwise we may end up with a hash table whose size is outside the allowed envelope.

Fixes a998f712f77e ("rhashtable: Round up/down min/max_size to...")
---
 lib/rhashtable.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
lib/rhashtable.c +3 -3
@@ -730,9 +730,6 @@ int rhashtable_init(struct rhashtable *h
 	if (params->nulls_base && params->nulls_base < (1U << RHT_BASE_SHIFT))
 		return -EINVAL;
 
-	if (params->nelem_hint)
-		size = rounded_hashtable_size(params);
-
 	memset(ht, 0, sizeof(*ht));
 	mutex_init(&ht->mutex);
 	spin_lock_init(&ht->lock);
@@ -752,6 +749,9 @@ int rhashtable_init(struct rhashtable *h
 
 	ht->p.min_size = max(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

Patches currently in stable-queue which might be from [email protected] are

queue-4.1/rhashtable-fix-walker-list-corruption.patch queue-4.1/rhashtable-enforce-minimum-size-on-initial-hash-table.patch