[PATCH v2 0/3 net-next] Lockless netlink_lookup() with new concurrent hash table

From: Thomas Graf
Date: Thu Jul 31 2014 - 18:56:19 EST


Netlink sockets are maintained in a hash table to allow efficient lookup
via the port ID for unicast messages. However, lookups currently require
a read lock to be taken. This series adds a new generic, resizable,
scalable, concurrent hash table based on the paper referenced in the first
patch. It then makes use of the new data type to implement lockless
netlink_lookup().

Patch 3/3 to convert nft_hash is included for reference but should be
merged via the netfilter tree. Inclusion in this series is to provide
context for the suggested API.

Against net-next since the initial user of the new hash table is in net/

Changes:
v1-v2:
- fixed traversal off-by-one as spotted by Tobias Klauser
- removed unlikely() from BUG_ON() as spotted by Josh Triplett
- new 3rd patch to convert nft_hash to rhashtable
- make rhashtable_insert() return void
- nl_sk_hash_lock must be a mutex
- fixed wrong name of rht_shrink_below_30()
- exported symbols rht_grow_above_75() and rht_shrink_below_30()
- allow table freeing with RCU callback

Thomas Graf (3):
lib: Resizable, Scalable, Concurrent Hash Table
netlink: Convert netlink_lookup() to use RCU protected hash table
nftables: Convert nft_hash to use generic rhashtable

include/linux/rhashtable.h | 213 ++++++++++++
lib/Kconfig.debug | 8 +
lib/Makefile | 2 +-
lib/rhashtable.c | 797 +++++++++++++++++++++++++++++++++++++++++++++
net/netfilter/nft_hash.c | 291 +++--------------
net/netlink/af_netlink.c | 285 ++++++----------
net/netlink/af_netlink.h | 18 +-
net/netlink/diag.c | 11 +-
8 files changed, 1190 insertions(+), 435 deletions(-)
create mode 100644 include/linux/rhashtable.h
create mode 100644 lib/rhashtable.c

--
1.9.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/