mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 11:06:41 -05:00
netfilter: nft_set_pipapo: prefer kvmalloc for scratch maps
The scratchmap size depends on the number of elements in the set. For huge sets, each scratch map can easily require very large allocations, e.g. for 100k entries each scratch map will require close to 64kbyte of memory. Signed-off-by: Florian Westphal <fw@strlen.de> Reviewed-by: Stefano Brivio <sbrivio@redhat.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
committed by
Pablo Neira Ayuso
parent
d8d871a35c
commit
897eefee2e
@@ -1152,7 +1152,7 @@ static void pipapo_free_scratch(const struct nft_pipapo_match *m, unsigned int c
|
||||
|
||||
mem = s;
|
||||
mem -= s->align_off;
|
||||
kfree(mem);
|
||||
kvfree(mem);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1173,10 +1173,9 @@ static int pipapo_realloc_scratch(struct nft_pipapo_match *clone,
|
||||
void *scratch_aligned;
|
||||
u32 align_off;
|
||||
#endif
|
||||
scratch = kzalloc_node(struct_size(scratch, map,
|
||||
bsize_max * 2) +
|
||||
NFT_PIPAPO_ALIGN_HEADROOM,
|
||||
GFP_KERNEL_ACCOUNT, cpu_to_node(i));
|
||||
scratch = kvzalloc_node(struct_size(scratch, map, bsize_max * 2) +
|
||||
NFT_PIPAPO_ALIGN_HEADROOM,
|
||||
GFP_KERNEL_ACCOUNT, cpu_to_node(i));
|
||||
if (!scratch) {
|
||||
/* On failure, there's no need to undo previous
|
||||
* allocations: this means that some scratch maps have
|
||||
|
||||
Reference in New Issue
Block a user