[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240620205623.60139-1-kuniyu@amazon.com>
Date: Thu, 20 Jun 2024 13:56:12 -0700
From: Kuniyuki Iwashima <kuniyu@...zon.com>
To: "David S. Miller" <davem@...emloft.net>, Eric Dumazet
<edumazet@...gle.com>, Jakub Kicinski <kuba@...nel.org>, Paolo Abeni
<pabeni@...hat.com>
CC: Kent Overstreet <kent.overstreet@...ux.dev>, Kuniyuki Iwashima
<kuniyu@...zon.com>, Kuniyuki Iwashima <kuni1840@...il.com>,
<netdev@...r.kernel.org>
Subject: [PATCH v4 net-next 00/11] af_unix: Remove spin_lock_nested() and convert to lock_cmp_fn.
This series removes spin_lock_nested() in AF_UNIX and instead
defines the locking orders as functions tied to each lock by
lockdep_set_lock_cmp_fn().
When the defined function returns a negative value, lockdep
considers it will not cause deadlock. (See ->cmp_fn() in
check_deadlock() and check_prev_add().)
When we cannot define the total ordering, we return -1 for
the allowed ordering and otherwise 0 as undefined. [0]
[0]: https://lore.kernel.org/netdev/thzkgbuwuo3knevpipu4rzsh5qgmwhklihypdgziiruabvh46f@uwdkpcfxgloo/
Changes:
v4:
* Patch 4
* Make unix_state_lock_cmp_fn() symmetric.
v3: https://lore.kernel.org/netdev/20240614200715.93150-1-kuniyu@amazon.com/
* Patch 3
* Cache sk->sk_state
* s/unix_state_lock()/unix_state_unlock()/
* Patch 8
* Add embryo -> listener locking order
v2: https://lore.kernel.org/netdev/20240611222905.34695-1-kuniyu@amazon.com/
* Patch 1 & 2
* Use (((l) > (r)) - ((l) < (r))) for comparison
v1: https://lore.kernel.org/netdev/20240610223501.73191-1-kuniyu@amazon.com/
Kuniyuki Iwashima (11):
af_unix: Define locking order for unix_table_double_lock().
af_unix: Define locking order for U_LOCK_SECOND in
unix_state_double_lock().
af_unix: Don't retry after unix_state_lock_nested() in
unix_stream_connect().
af_unix: Define locking order for U_LOCK_SECOND in
unix_stream_connect().
af_unix: Don't acquire unix_state_lock() for sock_i_ino().
af_unix: Remove U_LOCK_DIAG.
af_unix: Remove U_LOCK_GC_LISTENER.
af_unix: Define locking order for U_RECVQ_LOCK_EMBRYO in
unix_collect_skb().
af_unix: Set sk_peer_pid/sk_peer_cred locklessly for new socket.
af_unix: Remove put_pid()/put_cred() in copy_peercred().
af_unix: Don't use spin_lock_nested() in copy_peercred().
include/net/af_unix.h | 14 ----
net/unix/af_unix.c | 151 ++++++++++++++++++++++++++++--------------
net/unix/diag.c | 47 ++++---------
net/unix/garbage.c | 8 +--
4 files changed, 117 insertions(+), 103 deletions(-)
--
2.30.2
Powered by blists - more mailing lists