All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/2] nft hash resize fixes
@ 2015-02-24 18:07 Josh Hunt
  2015-02-24 18:07 ` [PATCH v4 1/2] nft_hash: define max_shift rhashtable parameter Josh Hunt
  2015-02-24 18:07 ` [PATCH v4 2/2] rhashtable: require max_shift if grow_decision defined Josh Hunt
  0 siblings, 2 replies; 4+ messages in thread
From: Josh Hunt @ 2015-02-24 18:07 UTC (permalink / raw)
  To: Pablo Neira Ayuso, Patrick McHardy, Thomas Graf
  Cc: netfilter-devel, netdev, Daniel Borkmann, Josh Hunt

Fixes nft hash set expansion problem.

v4:
  * reorder commits for bisect-ability
v3:
  * Renames NFT_HASH_MAX_ELEMENTS to NFT_HASH_MAX_BUCKETS
  * Add Acked-by for Thomas

Josh Hunt (2):
  nft_hash: define max_shift rhashtable parameter
  rhashtable: require max_shift if grow_decision defined

 lib/rhashtable.c         |    3 ++-
 net/netfilter/nft_hash.c |    4 ++++
 2 files changed, 6 insertions(+), 1 deletion(-)

-- 
1.7.9.5

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v4 1/2] nft_hash: define max_shift rhashtable parameter
  2015-02-24 18:07 [PATCH v4 0/2] nft hash resize fixes Josh Hunt
@ 2015-02-24 18:07 ` Josh Hunt
  2015-02-24 18:16   ` Daniel Borkmann
  2015-02-24 18:07 ` [PATCH v4 2/2] rhashtable: require max_shift if grow_decision defined Josh Hunt
  1 sibling, 1 reply; 4+ messages in thread
From: Josh Hunt @ 2015-02-24 18:07 UTC (permalink / raw)
  To: Pablo Neira Ayuso, Patrick McHardy, Thomas Graf
  Cc: netfilter-devel, netdev, Daniel Borkmann, Josh Hunt

You must define a max_shift parameter to rhashtable or else the table cannot
grow. This sets max_shift for nft_hash to 24, which will allow the table to
grow to 2^24 or 16 million buckets.

Acked-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: Josh Hunt <johunt@akamai.com>
---
 net/netfilter/nft_hash.c |    4 ++++
 1 file changed, 4 insertions(+)

diff --git a/net/netfilter/nft_hash.c b/net/netfilter/nft_hash.c
index 61e6c40..a32df35 100644
--- a/net/netfilter/nft_hash.c
+++ b/net/netfilter/nft_hash.c
@@ -23,6 +23,9 @@
 /* We target a hash table size of 4, element hint is 75% of final size */
 #define NFT_HASH_ELEMENT_HINT 3
 
+/* Set default of 2^24 buckets or 16 million entries */
+#define NFT_HASH_MAX_BUCKETS 24
+
 struct nft_hash_elem {
 	struct rhash_head		node;
 	struct nft_data			key;
@@ -192,6 +195,7 @@ static int nft_hash_init(const struct nft_set *set,
 		.key_offset = offsetof(struct nft_hash_elem, key),
 		.key_len = set->klen,
 		.hashfn = jhash,
+		.max_shift = NFT_HASH_MAX_BUCKETS,
 		.grow_decision = rht_grow_above_75,
 		.shrink_decision = rht_shrink_below_30,
 	};
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v4 2/2] rhashtable: require max_shift if grow_decision defined
  2015-02-24 18:07 [PATCH v4 0/2] nft hash resize fixes Josh Hunt
  2015-02-24 18:07 ` [PATCH v4 1/2] nft_hash: define max_shift rhashtable parameter Josh Hunt
@ 2015-02-24 18:07 ` Josh Hunt
  1 sibling, 0 replies; 4+ messages in thread
From: Josh Hunt @ 2015-02-24 18:07 UTC (permalink / raw)
  To: Pablo Neira Ayuso, Patrick McHardy, Thomas Graf
  Cc: netfilter-devel, netdev, Daniel Borkmann, Josh Hunt

If an rhashtable user defines a grow_decision fn they must also define a
max_shift parameter.

Acked-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: Josh Hunt <johunt@akamai.com>
---
 lib/rhashtable.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/rhashtable.c b/lib/rhashtable.c
index 9cc4c4a..7d6f539 100644
--- a/lib/rhashtable.c
+++ b/lib/rhashtable.c
@@ -1077,7 +1077,8 @@ int rhashtable_init(struct rhashtable *ht, struct rhashtable_params *params)
 	size = HASH_DEFAULT_SIZE;
 
 	if ((params->key_len && !params->hashfn) ||
-	    (!params->key_len && !params->obj_hashfn))
+	    (!params->key_len && !params->obj_hashfn) ||
+	    (params->grow_decision && !params->max_shift))
 		return -EINVAL;
 
 	if (params->nulls_base && params->nulls_base < (1U << RHT_BASE_SHIFT))
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v4 1/2] nft_hash: define max_shift rhashtable parameter
  2015-02-24 18:07 ` [PATCH v4 1/2] nft_hash: define max_shift rhashtable parameter Josh Hunt
@ 2015-02-24 18:16   ` Daniel Borkmann
  0 siblings, 0 replies; 4+ messages in thread
From: Daniel Borkmann @ 2015-02-24 18:16 UTC (permalink / raw)
  To: Josh Hunt, Pablo Neira Ayuso, Patrick McHardy, Thomas Graf
  Cc: netfilter-devel, netdev

On 02/24/2015 07:07 PM, Josh Hunt wrote:
> You must define a max_shift parameter to rhashtable or else the table cannot
> grow. This sets max_shift for nft_hash to 24, which will allow the table to
> grow to 2^24 or 16 million buckets.
>
> Acked-by: Thomas Graf <tgraf@suug.ch>
> Signed-off-by: Josh Hunt <johunt@akamai.com>

Acked-by: Daniel Borkmann <daniel@iogearbox.net>

Thanks Josh!

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-02-24 18:16 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-02-24 18:07 [PATCH v4 0/2] nft hash resize fixes Josh Hunt
2015-02-24 18:07 ` [PATCH v4 1/2] nft_hash: define max_shift rhashtable parameter Josh Hunt
2015-02-24 18:16   ` Daniel Borkmann
2015-02-24 18:07 ` [PATCH v4 2/2] rhashtable: require max_shift if grow_decision defined Josh Hunt

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.