mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 10:49:33 +00:00
netfilter: nft_hash: use set global element counter instead of private one
Now that nf_tables performs global accounting of set elements, it is not needed in the hash type anymore. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
c50b960ccc
commit
2c96c25d11
1 changed files with 2 additions and 7 deletions
|
@ -28,7 +28,6 @@ struct nft_hash {
|
|||
|
||||
struct nft_hash_table {
|
||||
unsigned int size;
|
||||
unsigned int elements;
|
||||
struct nft_hash_elem __rcu *buckets[];
|
||||
};
|
||||
|
||||
|
@ -167,7 +166,6 @@ static int nft_hash_tbl_expand(const struct nft_set *set, struct nft_hash *priv)
|
|||
break;
|
||||
}
|
||||
}
|
||||
ntbl->elements = tbl->elements;
|
||||
|
||||
/* Publish new table */
|
||||
rcu_assign_pointer(priv->tbl, ntbl);
|
||||
|
@ -207,7 +205,6 @@ static int nft_hash_tbl_shrink(const struct nft_set *set, struct nft_hash *priv)
|
|||
;
|
||||
RCU_INIT_POINTER(*pprev, tbl->buckets[i + ntbl->size]);
|
||||
}
|
||||
ntbl->elements = tbl->elements;
|
||||
|
||||
/* Publish new table */
|
||||
rcu_assign_pointer(priv->tbl, ntbl);
|
||||
|
@ -243,10 +240,9 @@ static int nft_hash_insert(const struct nft_set *set,
|
|||
h = nft_hash_data(&he->key, tbl->size, set->klen);
|
||||
RCU_INIT_POINTER(he->next, tbl->buckets[h]);
|
||||
rcu_assign_pointer(tbl->buckets[h], he);
|
||||
tbl->elements++;
|
||||
|
||||
/* Expand table when exceeding 75% load */
|
||||
if (tbl->elements > tbl->size / 4 * 3)
|
||||
if (set->nelems + 1 > tbl->size / 4 * 3)
|
||||
nft_hash_tbl_expand(set, priv);
|
||||
|
||||
return 0;
|
||||
|
@ -274,10 +270,9 @@ static void nft_hash_remove(const struct nft_set *set,
|
|||
RCU_INIT_POINTER(*pprev, he->next);
|
||||
synchronize_rcu();
|
||||
kfree(he);
|
||||
tbl->elements--;
|
||||
|
||||
/* Shrink table beneath 30% load */
|
||||
if (tbl->elements < tbl->size * 3 / 10 &&
|
||||
if (set->nelems - 1 < tbl->size * 3 / 10 &&
|
||||
tbl->size > NFT_HASH_MIN_SIZE)
|
||||
nft_hash_tbl_shrink(set, priv);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue