[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20211124021431.48956-1-kuniyu@amazon.co.jp>
Date: Wed, 24 Nov 2021 11:14:18 +0900
From: Kuniyuki Iwashima <kuniyu@...zon.co.jp>
To: "David S. Miller" <davem@...emloft.net>,
Jakub Kicinski <kuba@...nel.org>
CC: Al Viro <viro@...iv.linux.org.uk>,
Eric Dumazet <eric.dumazet@...il.com>,
Kuniyuki Iwashima <kuniyu@...zon.co.jp>,
Kuniyuki Iwashima <kuni1840@...il.com>,
Benjamin Herrenschmidt <benh@...zon.com>,
<netdev@...r.kernel.org>
Subject: [PATCH v3 net-next 00/13] af_unix: Replace unix_table_lock with per-hash locks.
The hash table of AF_UNIX sockets is protected by a single big lock,
unix_table_lock. This series replaces it with small per-hash locks.
1st - 2nd : Misc refactoring
3rd - 8th : Separate BSD/abstract address logics
9th - 11th : Prep to save a hash in each socket
12th : Replace the big lock
13th : Speed up autobind()
After this series land in bpf-next, I will post another series to support
bpf batching iteration and bpf_(get|set)sockopt for AF_UNIX sockets.
Note to maintainers:
The 12th patch adds two kinds of Sparse warnings on patchwork:
about unix_table_double_lock/unlock()
We can avoid this by adding two apparent acquires/releases annotations,
but there are the same kinds of warnings about unix_state_double_lock().
about unix_next_socket() and unix_seq_stop() (/proc/net/unix)
This is because Sparse does not understand logic in unix_next_socket(),
which leaves a spin lock held until it returns NULL.
Also, tcp_seq_stop() causes a warning for the same reason.
These warnings seem reasonable, but let me know if there is any better way.
Please see [0] for details.
[0]: https://lore.kernel.org/netdev/20211117001611.74123-1-kuniyu@amazon.co.jp/
Changelog:
v3:
Fix `checkpatch.pl --max-line-length=80` warnings.
v2:
https://lore.kernel.org/netdev/20211114012428.81743-1-kuniyu@amazon.co.jp/
12th: Use spin_lock_nested()
13th: Avoid infinite loop (Eric Dumazet)
13th: s/initnum/lastnum/
v1:
https://lore.kernel.org/netdev/20211106091712.15206-1-kuniyu@amazon.co.jp/
Kuniyuki Iwashima (13):
af_unix: Use offsetof() instead of sizeof().
af_unix: Pass struct sock to unix_autobind().
af_unix: Factorise unix_find_other() based on address types.
af_unix: Return an error as a pointer in unix_find_other().
af_unix: Cut unix_validate_addr() out of unix_mkname().
af_unix: Copy unix_mkname() into unix_find_(bsd|abstract)().
af_unix: Remove unix_mkname().
af_unix: Allocate unix_address in unix_bind_(bsd|abstract)().
af_unix: Remove UNIX_ABSTRACT() macro and test sun_path[0] instead.
af_unix: Add helpers to calculate hashes.
af_unix: Save hash in sk_hash.
af_unix: Replace the big lock with small locks.
af_unix: Relax race in unix_autobind().
include/net/af_unix.h | 3 +-
net/unix/af_unix.c | 567 ++++++++++--------
net/unix/diag.c | 23 +-
.../selftests/bpf/progs/bpf_iter_unix.c | 2 +-
.../selftests/bpf/progs/bpf_tracing_net.h | 2 -
.../bpf/progs/test_skc_to_unix_sock.c | 2 +-
6 files changed, 346 insertions(+), 253 deletions(-)
--
2.30.2
Powered by blists - more mailing lists