]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
rxrpc: Don't try to resend the request if we're receiving the reply
authorDavid Howells <dhowells@redhat.com>
Sat, 21 May 2022 08:03:11 +0000 (09:03 +0100)
committerDavid S. Miller <davem@davemloft.net>
Sun, 22 May 2022 20:30:53 +0000 (21:30 +0100)
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>
net/rxrpc/call_event.c

index 22e05de5d1ca96fccb667a0a287e0042fc5be6e9..31761084a76fba15f009726f044bbf2da3adaaf2 100644 (file)
@@ -406,7 +406,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;
        }