summaryrefslogtreecommitdiffstats
path: root/net/rxrpc/call_accept.c
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2022-10-12 15:42:06 +0100
committerDavid Howells <dhowells@redhat.com>2022-12-01 13:36:41 +0000
commit29fb4ec385f18db98d9188c2173a0b07d2de6917 (patch)
tree5421332d90da716ec1aaf36574cfe68af7f994e2 /net/rxrpc/call_accept.c
parentcf37b5987508878647161ec3cdba0bb00a1b607a (diff)
downloadlinux-29fb4ec385f18db98d9188c2173a0b07d2de6917.tar.bz2
rxrpc: Remove RCU from peer->error_targets list
Remove the RCU requirements from the peer's list of error targets so that the error distributor can call sleeping functions. Signed-off-by: David Howells <dhowells@redhat.com> cc: Marc Dionne <marc.dionne@auristor.com> cc: linux-afs@lists.infradead.org
Diffstat (limited to 'net/rxrpc/call_accept.c')
-rw-r--r--net/rxrpc/call_accept.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/net/rxrpc/call_accept.c b/net/rxrpc/call_accept.c
index 8bc327aa2beb..5f978b0b2404 100644
--- a/net/rxrpc/call_accept.c
+++ b/net/rxrpc/call_accept.c
@@ -433,6 +433,12 @@ struct rxrpc_call *rxrpc_new_incoming_call(struct rxrpc_local *local,
*/
rxrpc_put_call(call, rxrpc_call_put_discard_prealloc);
+ if (hlist_unhashed(&call->error_link)) {
+ spin_lock(&call->peer->lock);
+ hlist_add_head(&call->error_link, &call->peer->error_targets);
+ spin_unlock(&call->peer->lock);
+ }
+
_leave(" = %p{%d}", call, call->debug_id);
return call;