summaryrefslogtreecommitdiffstats
path: root/net/rxrpc/txbuf.c
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2022-10-17 22:48:58 +0100
committerDavid Howells <dhowells@redhat.com>2023-01-31 16:38:35 +0000
commitb30d61f4b12899101f754238f02069ff4d6161c2 (patch)
tree65b12e72df351e06904d1b5ae668e848dc7914a1 /net/rxrpc/txbuf.c
parentf21e93485bcbfa2753d1447b6198604a2c3d57be (diff)
downloadlinux-stable-b30d61f4b12899101f754238f02069ff4d6161c2.tar.gz
linux-stable-b30d61f4b12899101f754238f02069ff4d6161c2.tar.bz2
linux-stable-b30d61f4b12899101f754238f02069ff4d6161c2.zip
rxrpc: Don't lock call->tx_lock to access call->tx_buffer
call->tx_buffer is now only accessed within the I/O thread (->tx_sendmsg is the way sendmsg passes packets to the I/O thread) so there's no need to lock around it. 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/txbuf.c')
-rw-r--r--net/rxrpc/txbuf.c12
1 files changed, 2 insertions, 10 deletions
diff --git a/net/rxrpc/txbuf.c b/net/rxrpc/txbuf.c
index d2cf2aac3adb..d43be8512386 100644
--- a/net/rxrpc/txbuf.c
+++ b/net/rxrpc/txbuf.c
@@ -110,12 +110,8 @@ void rxrpc_shrink_call_tx_buffer(struct rxrpc_call *call)
_enter("%x/%x/%x", call->tx_bottom, call->acks_hard_ack, call->tx_top);
- for (;;) {
- spin_lock(&call->tx_lock);
- txb = list_first_entry_or_null(&call->tx_buffer,
- struct rxrpc_txbuf, call_link);
- if (!txb)
- break;
+ while ((txb = list_first_entry_or_null(&call->tx_buffer,
+ struct rxrpc_txbuf, call_link))) {
hard_ack = smp_load_acquire(&call->acks_hard_ack);
if (before(hard_ack, txb->seq))
break;
@@ -128,15 +124,11 @@ void rxrpc_shrink_call_tx_buffer(struct rxrpc_call *call)
trace_rxrpc_txqueue(call, rxrpc_txqueue_dequeue);
- spin_unlock(&call->tx_lock);
-
rxrpc_put_txbuf(txb, rxrpc_txbuf_put_rotated);
if (after(call->acks_hard_ack, call->tx_bottom + 128))
wake = true;
}
- spin_unlock(&call->tx_lock);
-
if (wake)
wake_up(&call->waitq);
}