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 c4402c26
-
mentioned in commit fbb94719
-
mentioned in commit ebb924c7
-
mentioned in commit 74e57def
-
mentioned in commit 1207394d
-
mentioned in commit 7b43c156
-
mentioned in commit aa252a7e
-
mentioned in commit 49bee887
-
mentioned in commit ceecab59
-
mentioned in commit c1b4e3bf
-
mentioned in commit c2b044d9
-
mentioned in commit 5ada2880
-
mentioned in commit 98aebd30
Please sign in to comment