netfilter: use kvmalloc_array to allocate memory for hashtable
authorLi RongQing <lirongqing@baidu.com>
Wed, 25 Jul 2018 07:52:13 +0000 (15:52 +0800)
committerPablo Neira Ayuso <pablo@netfilter.org>
Fri, 3 Aug 2018 16:37:55 +0000 (18:37 +0200)
commit285189c78eeb6f684a024b86fb5997d10c6aa564
treefb9a54b77b1e953269f5d2787cdbe75d6ea4aef2
parent4ed8eb6570a49931c705512060acd50058d61616
netfilter: use kvmalloc_array to allocate memory for hashtable

nf_ct_alloc_hashtable is used to allocate memory for conntrack,
NAT bysrc and expectation hashtable. Assuming 64k bucket size,
which means 7th order page allocation, __get_free_pages, called
by nf_ct_alloc_hashtable, will trigger the direct memory reclaim
and stall for a long time, when system has lots of memory stress

so replace combination of __get_free_pages and vzalloc with
kvmalloc_array, which provides a overflow check and a fallback
if no high order memory is available, and do not retry to reclaim
memory, reduce stall

and remove nf_ct_free_hashtable, since it is just a kvfree

Signed-off-by: Zhang Yu <zhangyu31@baidu.com>
Signed-off-by: Wang Li <wangli39@baidu.com>
Signed-off-by: Li RongQing <lirongqing@baidu.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/net/netfilter/nf_conntrack.h
net/netfilter/nf_conntrack_core.c
net/netfilter/nf_conntrack_expect.c
net/netfilter/nf_conntrack_helper.c
net/netfilter/nf_nat_core.c