af_unix: Remove lock dance in unix_peek_fds().
commit 118f457d upstream. In the previous GC implementation, the shape of the inflight socket graph was not expected to change while GC was in progress. MSG_PEEK was tricky because it could install inflight fd silently and transform the graph. Let's say we peeked a fd, which was a listening socket, and accept()ed some embryo sockets from it. The garbage collection algorithm would have been confused because the set of sockets visited in scan_inflight() would change within the same GC invocation. That's why we placed spin_lock(&unix_gc_lock) and spin_unlock() in unix_peek_fds() with a fat comment. In the new GC implementation, we no longer garbage-collect the socket if it exists in another queue, that is, if it has a bridge to another SCC. Also, accept() will require the lock if it has edges. Thus, we need not do the complicated lock dance. Signed-off-by:Kuniyuki Iwashima <kuniyu@amazon.com> Link: https://lore.kernel.org/r/20240401173125.92184-3-kuniyu@amazon.com Signed-off-by:
Jakub Kicinski <kuba@kernel.org> Signed-off-by:
Lee Jones <lee@kernel.org> Signed-off-by:
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Loading
-
mentioned in commit ec42211c
-
mentioned in commit a7ee6f88
-
mentioned in commit d2be7a84
-
mentioned in commit 0f50feed
-
mentioned in commit f2bc8a9b
-
mentioned in commit 46b2df30
-
mentioned in commit d6d679a5
-
mentioned in commit 3f899ae7
-
mentioned in commit 49e03bf8
-
mentioned in commit 5ba9991d
-
mentioned in commit d94b1cb6
-
mentioned in commit b7c04bd7
-
mentioned in commit 45271a2c
Please sign in to comment