]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commit
netfilter: nat: Revert "netfilter: nat: convert nat bysrc hash to rhashtable"
authorFlorian Westphal <fw@strlen.de>
Wed, 6 Sep 2017 12:39:51 +0000 (14:39 +0200)
committerThadeu Lima de Souza Cascardo <cascardo@canonical.com>
Thu, 16 Nov 2017 21:05:36 +0000 (19:05 -0200)
commitfa3e0709504feb851802b926d68f6c218e0a4cda
tree991672b7228d5fbb5c8b29009a9102cb02839979
parent2db3e543fd3f1a21342c9228fc3368ee3b8acc22
netfilter: nat: Revert "netfilter: nat: convert nat bysrc hash to rhashtable"

BugLink: http://bugs.launchpad.net/bugs/1732726
commit e1bf1687740ce1a3598a1c5e452b852ff2190682 upstream.

This reverts commit 870190a9ec9075205c0fa795a09fa931694a3ff1.

It was not a good idea. The custom hash table was a much better
fit for this purpose.

A fast lookup is not essential, in fact for most cases there is no lookup
at all because original tuple is not taken and can be used as-is.
What needs to be fast is insertion and deletion.

rhlist removal however requires a rhlist walk.
We can have thousands of entries in such a list if source port/addresses
are reused for multiple flows, if this happens removal requests are so
expensive that deletions of a few thousand flows can take several
seconds(!).

The advantages that we got from rhashtable are:
1) table auto-sizing
2) multiple locks

1) would be nice to have, but it is not essential as we have at
most one lookup per new flow, so even a million flows in the bysource
table are not a problem compared to current deletion cost.
2) is easy to add to custom hash table.

I tried to add hlist_node to rhlist to speed up rhltable_remove but this
isn't doable without changing semantics.  rhltable_remove_fast will
check that the to-be-deleted object is part of the table and that
requires a list walk that we want to avoid.

Furthermore, using hlist_node increases size of struct rhlist_head, which
in turn increases nf_conn size.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=196821
Reported-by: Ivan Babrou <ibobrik@gmail.com>
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
include/net/netfilter/nf_conntrack.h
include/net/netfilter/nf_nat.h
net/netfilter/nf_nat_core.c