Skip to content

Commit 02c28df

Browse files
committed
rxrpc: Fix afs large storage transmission performance drop
Commit 2ad6691, 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: 2ad6691 ("rxrpc: Fix race between incoming ACK parser and retransmitter") Signed-off-by: David Howells <[email protected]>
1 parent a2ad7c2 commit 02c28df

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

net/rxrpc/call_event.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ static void rxrpc_resend(struct rxrpc_call *call, unsigned long now_j)
253253
* confuse things
254254
*/
255255
annotation &= ~RXRPC_TX_ANNO_MASK;
256-
annotation |= RXRPC_TX_ANNO_RESENT;
256+
annotation |= RXRPC_TX_ANNO_UNACK | RXRPC_TX_ANNO_RESENT;
257257
call->rxtx_annotations[ix] = annotation;
258258

259259
skb = call->rxtx_buffer[ix];

0 commit comments

Comments
 (0)