This series is a collection of all the various conncount patches that have
been floating around recently.
The overall goal is to simplify nf_conncount instead of just addressing
bugs. This series removes quite a few lines of code and conditionals.
Most importantly, 'conn' list traversal now requires the node list_lock.
Second, the garbage collection cannot race with the packet path anymore,
collection of conn objects acquires the list_lock, and tree pruning
only occurs after the tree lock has been acquired.
While looking at this, I found a few more, albeit minor, bugs,
these are fixed here as well.
I've mangled Pablos patches a little so they apply on top
of the other ones, but otherwise no major changes happened.
I've tested this with parallel synfloods against a VM (with no patches,
KASAN splats happen almost instantly).
Please see individual patches for more details.
I'd like to thank everyone that has contributed patches and ideas for this.
More comments, reviews and tests are much appreciated.
Florian Westphal (5):
netfilter: nf_conncount: don't skip eviction when age is negative
netfilter: nf_conncount: split gc in two phases
netfilter: nf_conncount: restart search when nodes have been erased
netfilter: nf_conncount: merge lookup and add functions
netfilter: nf_conncount: fix argument order to find_next_bit
Pablo Neira Ayuso (2):
netfilter: nf_conncount: move all list iterations under spinlock
netfilter: nf_conncount: speculative garbage collection on empty lists
Shawn Bohrer (1):
nf_conncount: replace CONNCOUNT_LOCK_SLOTS with CONNCOUNT_SLOTS
include/net/netfilter/nf_conntrack_count.h | 19 -
net/netfilter/nf_conncount.c | 290 ++++++++++++-----------------
net/netfilter/nft_connlimit.c | 14 -
3 files changed, 134 insertions(+), 189 deletions(-)