rxrpc: Fix afs large storage transmission performance drop
Commit2ad6691d98
, which moved the modification of the status annotation for a packet in the Tx buffer prior to the retransmission moved the state clearance, but managed to lose the bit that set it to UNACK. Consequently, if a retransmission occurs, the packet is accidentally changed to the ACK state (ie. 0) by masking it off, which means that the packet isn't counted towards the tally of newly-ACK'd packets if it gets hard-ACK'd. This then prevents the congestion control algorithm from recovering properly. Fix by reinstating the change of state to UNACK. Spotted by the generic/460 xfstest. Fixes:2ad6691d98
("rxrpc: Fix race between incoming ACK parser and retransmitter") Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
parent
a2ad7c21ad
commit
02c28dffb1
|
@ -253,7 +253,7 @@ static void rxrpc_resend(struct rxrpc_call *call, unsigned long now_j)
|
|||
* confuse things
|
||||
*/
|
||||
annotation &= ~RXRPC_TX_ANNO_MASK;
|
||||
annotation |= RXRPC_TX_ANNO_RESENT;
|
||||
annotation |= RXRPC_TX_ANNO_UNACK | RXRPC_TX_ANNO_RESENT;
|
||||
call->rxtx_annotations[ix] = annotation;
|
||||
|
||||
skb = call->rxtx_buffer[ix];
|
||||
|
|
Loading…
Reference in New Issue