diff options
| author | David Howells <dhowells@redhat.com> | 2024-11-06 13:03:22 +0000 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2024-11-14 13:19:32 +0100 |
| commit | 996a7208dadbf2cdda8d51444d5ee1fdd1ccbc92 (patch) | |
| tree | 6dbbc5952c066fb920f15f96aeace3f55aface56 /include | |
| parent | 0012be71c55b9f1e5f5fa337e131cc750143d226 (diff) | |
| download | linux-996a7208dadbf2cdda8d51444d5ee1fdd1ccbc92.tar.gz linux-996a7208dadbf2cdda8d51444d5ee1fdd1ccbc92.tar.bz2 linux-996a7208dadbf2cdda8d51444d5ee1fdd1ccbc92.zip | |
rxrpc: Fix missing locking causing hanging calls
[ Upstream commit fc9de52de38f656399d2ce40f7349a6b5f86e787 ]
If a call gets aborted (e.g. because kafs saw a signal) between it being
queued for connection and the I/O thread picking up the call, the abort
will be prioritised over the connection and it will be removed from
local->new_client_calls by rxrpc_disconnect_client_call() without a lock
being held. This may cause other calls on the list to disappear if a race
occurs.
Fix this by taking the client_call_lock when removing a call from whatever
list its ->wait_link happens to be on.
Signed-off-by: David Howells <dhowells@redhat.com>
cc: linux-afs@lists.infradead.org
Reported-by: Marc Dionne <marc.dionne@auristor.com>
Fixes: 9d35d880e0e4 ("rxrpc: Move client call connection to the I/O thread")
Link: https://patch.msgid.link/726660.1730898202@warthog.procyon.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'include')
| -rw-r--r-- | include/trace/events/rxrpc.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/trace/events/rxrpc.h b/include/trace/events/rxrpc.h index 3322fb93a260..ed36f5f577a9 100644 --- a/include/trace/events/rxrpc.h +++ b/include/trace/events/rxrpc.h @@ -283,6 +283,7 @@ EM(rxrpc_call_see_input, "SEE input ") \ EM(rxrpc_call_see_release, "SEE release ") \ EM(rxrpc_call_see_userid_exists, "SEE u-exists") \ + EM(rxrpc_call_see_waiting_call, "SEE q-conn ") \ E_(rxrpc_call_see_zap, "SEE zap ") #define rxrpc_txqueue_traces \ |
