mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 20:48:49 +08:00
rxrpc: Fix accidental cancellation of scheduled resend by ACK parser
When rxrpc_input_soft_acks() is parsing the soft-ACKs from an ACK packet, it updates the Tx packet annotations in the annotation buffer. If a soft-ACK is an ACK, then we overwrite unack'd, nak'd or to-be-retransmitted states and that is fine; but if the soft-ACK is an NACK, we overwrite the to-be-retransmitted with a nak - which isn't. Instead, we need to let any scheduled retransmission stand if the packet was NAK'd. Note that we don't reissue a resend if the annotation is in the to-be-retransmitted state because someone else must've scheduled the resend already. Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
parent
dfc3da4404
commit
be8aa33806
@ -479,6 +479,8 @@ static void rxrpc_input_soft_acks(struct rxrpc_call *call, u8 *acks,
|
||||
case RXRPC_ACK_TYPE_NACK:
|
||||
if (anno_type == RXRPC_TX_ANNO_NAK)
|
||||
continue;
|
||||
if (anno_type == RXRPC_TX_ANNO_RETRANS)
|
||||
continue;
|
||||
call->rxtx_annotations[ix] =
|
||||
RXRPC_TX_ANNO_NAK | annotation;
|
||||
resend = true;
|
||||
|
Loading…
Reference in New Issue
Block a user