mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-07 21:53:44 +00:00
rxrpc: Remove atomic handling on some fields only used in I/O thread
call->tx_transmitted and call->acks_prev_seq don't need to be managed with cmpxchg() and barriers as it's only used within the singular I/O thread. Signed-off-by: David Howells <dhowells@redhat.com> cc: Marc Dionne <marc.dionne@auristor.com> cc: "David S. Miller" <davem@davemloft.net> cc: Eric Dumazet <edumazet@google.com> cc: Jakub Kicinski <kuba@kernel.org> cc: Paolo Abeni <pabeni@redhat.com> cc: linux-afs@lists.infradead.org cc: netdev@vger.kernel.org
This commit is contained in:
parent
d73f3a7488
commit
693f9c13ec
@ -115,7 +115,7 @@ void rxrpc_resend(struct rxrpc_call *call, struct sk_buff *ack_skb)
|
||||
struct rxrpc_skb_priv *sp;
|
||||
struct rxrpc_txbuf *txb;
|
||||
unsigned long resend_at;
|
||||
rxrpc_seq_t transmitted = READ_ONCE(call->tx_transmitted);
|
||||
rxrpc_seq_t transmitted = call->tx_transmitted;
|
||||
ktime_t now, max_age, oldest, ack_ts;
|
||||
bool unacked = false;
|
||||
unsigned int i;
|
||||
@ -184,16 +184,14 @@ void rxrpc_resend(struct rxrpc_call *call, struct sk_buff *ack_skb)
|
||||
* seen. Anything between the soft-ACK table and that point will get
|
||||
* ACK'd or NACK'd in due course, so don't worry about it here; here we
|
||||
* need to consider retransmitting anything beyond that point.
|
||||
*
|
||||
* Note that ACK for a packet can beat the update of tx_transmitted.
|
||||
*/
|
||||
if (after_eq(READ_ONCE(call->acks_prev_seq), READ_ONCE(call->tx_transmitted)))
|
||||
if (after_eq(call->acks_prev_seq, call->tx_transmitted))
|
||||
goto no_further_resend;
|
||||
|
||||
list_for_each_entry_from(txb, &call->tx_buffer, call_link) {
|
||||
if (before_eq(txb->seq, READ_ONCE(call->acks_prev_seq)))
|
||||
if (before_eq(txb->seq, call->acks_prev_seq))
|
||||
continue;
|
||||
if (after(txb->seq, READ_ONCE(call->tx_transmitted)))
|
||||
if (after(txb->seq, call->tx_transmitted))
|
||||
break; /* Not transmitted yet */
|
||||
|
||||
if (ack && ack->reason == RXRPC_ACK_PING_RESPONSE &&
|
||||
|
@ -397,12 +397,10 @@ int rxrpc_send_data_packet(struct rxrpc_call *call, struct rxrpc_txbuf *txb)
|
||||
|
||||
/* Track what we've attempted to transmit at least once so that the
|
||||
* retransmission algorithm doesn't try to resend what we haven't sent
|
||||
* yet. However, this can race as we can receive an ACK before we get
|
||||
* to this point. But, OTOH, if we won't get an ACK mentioning this
|
||||
* packet unless the far side received it (though it could have
|
||||
* discarded it anyway and NAK'd it).
|
||||
* yet.
|
||||
*/
|
||||
cmpxchg(&call->tx_transmitted, txb->seq - 1, txb->seq);
|
||||
if (txb->seq == call->tx_transmitted + 1)
|
||||
call->tx_transmitted = txb->seq;
|
||||
|
||||
/* send the packet with the don't fragment bit set if we currently
|
||||
* think it's small enough */
|
||||
|
Loading…
Reference in New Issue
Block a user