Merge branch 'af_unix-replace-unix_table_lock-with-per-hash-locks'
authorJakub Kicinski <kuba@kernel.org>
Sat, 27 Nov 2021 02:02:02 +0000 (18:02 -0800)
committerJakub Kicinski <kuba@kernel.org>
Sat, 27 Nov 2021 02:03:36 +0000 (18:03 -0800)
commitd40ce48cb3a68b54be123a1f99157c5ac613e260
treee337d5656b0d0e55f91ed055fd3383aa42032427
parent442b03c32ca1077c75682346a1434eedcdc3e4d4
parent9acbc584c3a4e9706703039708ec947ffc152c66
Merge branch 'af_unix-replace-unix_table_lock-with-per-hash-locks'

Kuniyuki Iwashima says:

====================
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()

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/
====================

Link: https://lore.kernel.org/r/20211124021431.48956-1-kuniyu@amazon.co.jp
Signed-off-by: Jakub Kicinski <kuba@kernel.org>