aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2020-06-17 15:46:33 +0100
committerPaul Gortmaker <paul.gortmaker@windriver.com>2020-07-24 16:24:25 -0400
commitdb0b9ab3cd3c49341fe4c555fc65bd950a9e6177 (patch)
treef027c472861ef7e3653f162c65b65f973d59905e
parent81b3734ddbf56f9616def2acfbe200a98c5226d7 (diff)
downloadlinux-yocto-db0b9ab3cd3c49341fe4c555fc65bd950a9e6177.tar.gz
linux-yocto-db0b9ab3cd3c49341fe4c555fc65bd950a9e6177.tar.bz2
linux-yocto-db0b9ab3cd3c49341fe4c555fc65bd950a9e6177.zip
rxrpc: Fix afs large storage transmission performance drop
commit 02c28dffb13abbaaedece1e4a6493b48ad3f913a upstream. Commit 2ad6691d988c, 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: 2ad6691d988c ("rxrpc: Fix race between incoming ACK parser and retransmitter") Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
-rw-r--r--net/rxrpc/call_event.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/net/rxrpc/call_event.c b/net/rxrpc/call_event.c
index 40b9d6b1d297..97ddf2f72a56 100644
--- a/net/rxrpc/call_event.c
+++ b/net/rxrpc/call_event.c
@@ -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];