Lockless netlink_lookup() with new concurrent hash table
Status from this message: Applied, thanks Thomas.
Get series with b4
b4 am [email protected]Versions newest first · linked by author and title
- v5 Latest3 patches 8 repliesApplied
- v43 patches 8 repliesSuperseded
- v33 patches 7 repliesSuperseded
Earlier versions · 2
| Version | Posted | Patches | Replies | Status |
|---|---|---|---|---|
| v2 | 3 patches | 3 replies | Superseded | |
| v1 | 2 patches | 5 replies | Superseded |
Changes from the cover letter · 18 lines
v4-v5:
- use GFP_KERNEL to alloc Netlink buckets as suggested by Nikolay Aleksandrov
- free nft hash element on removal as spotted by Nikolay Aleksandrov and Patrick McHardy
v3-v4:
- fixed wrong shift assignment placement as spotted by Nikolay Aleksandrov
- reverted default size of nft_hash to 4 as requested by Patrick McHardy, default size for other hash tables remains at 64 if no hint is given
- fixed copyright as requested by Patrick McHardy
v2-v3:
- fixed typo in nft_hash_destroy() when passing rhashtable handle
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
Patches in v5 Applied
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/3 | lib: Resizable, Scalable, Concurrent Hash Tableinclude/ lib/ lib/ +1 more | +1019 | 1 reply | |
| 2/3 | netlink: Convert netlink_lookup() to use RCU protected hash tablenet/ net/ net/ | +119 | 5 replies | |
| 3/3 | nftables: Convert nft_hash to use generic rhashtablenet/ | +55 | 1 reply |
Reviews trailers per patch
All 3 patches have a Reviewed-by or Acked-by.
| Patch | Patrick McHardy | Nikolay Aleksandrov |
|---|---|---|
| 1/3 | R-b | |
| 2/3 | R-b | |
| 3/3 | A-b | R-b |
Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.
Cover letter [PATCH net-next v5 0/3] Lockless netlink_lookup() with new concurrent hash table
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:
v4-v5:
- use GFP_KERNEL to alloc Netlink buckets as suggested by Nikolay Aleksandrov
- free nft hash element on removal as spotted by Nikolay Aleksandrov and Patrick McHardy
v3-v4:
- fixed wrong shift assignment placement as spotted by Nikolay Aleksandrov
- reverted default size of nft_hash to 4 as requested by Patrick McHardy, default size for other hash tables remains at 64 if no hint is given
- fixed copyright as requested by Patrick McHardy
v2-v3:
- fixed typo in nft_hash_destroy() when passing rhashtable handle
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, 1193 insertions(+), 432 deletions(-) create mode 100644 include/linux/rhashtable.h create mode 100644 lib/rhashtable.c
Signature · 1 line
1.9.3