summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2022-05-21 09:03:11 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2022-06-14 18:11:38 +0200
commit5aa14dafd2b091acc1ebbcbb125cd5d54ed76669 (patch)
treec105814a82fe637e8128b9dd6f9645d10164e42f /net
parent91b34bf0409f43bb60453bab23c5beadd726d022 (diff)
downloadlinux-stable-5aa14dafd2b091acc1ebbcbb125cd5d54ed76669.tar.gz
linux-stable-5aa14dafd2b091acc1ebbcbb125cd5d54ed76669.tar.bz2
linux-stable-5aa14dafd2b091acc1ebbcbb125cd5d54ed76669.zip
rxrpc: Don't try to resend the request if we're receiving the reply
[ Upstream commit 114af61f88fbe34d641b13922d098ffec4c1be1b ] rxrpc has a timer to trigger resending of unacked data packets in a call. This is not cancelled when a client call switches to the receive phase on the basis that most calls don't last long enough for it to ever expire. However, if it *does* expire after we've started to receive the reply, we shouldn't then go into trying to retransmit or pinging the server to find out if an ack got lost. Fix this by skipping the resend code if we're into receiving the reply to a client call. Fixes: 17926a79320a ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both") Signed-off-by: David Howells <dhowells@redhat.com> cc: linux-afs@lists.infradead.org Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'net')
-rw-r--r--net/rxrpc/call_event.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/rxrpc/call_event.c b/net/rxrpc/call_event.c
index 80e15310f1b2..8574e7066d94 100644
--- a/net/rxrpc/call_event.c
+++ b/net/rxrpc/call_event.c
@@ -407,7 +407,8 @@ recheck_state:
goto recheck_state;
}
- if (test_and_clear_bit(RXRPC_CALL_EV_RESEND, &call->events)) {
+ if (test_and_clear_bit(RXRPC_CALL_EV_RESEND, &call->events) &&
+ call->state != RXRPC_CALL_CLIENT_RECV_REPLY) {
rxrpc_resend(call, now);
goto recheck_state;
}