rxrpc: Don't permit resending after all Tx packets acked
authorDavid Howells <dhowells@redhat.com>
Thu, 29 Feb 2024 16:50:52 +0000 (16:50 +0000)
committerDavid Howells <dhowells@redhat.com>
Tue, 5 Mar 2024 23:35:24 +0000 (23:35 +0000)
Once all the packets transmitted as part of a call have been acked, don't
permit any resending.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: "David S. Miller" <davem@davemloft.net>
cc: Eric Dumazet <edumazet@google.com>
cc: Jakub Kicinski <kuba@kernel.org>
cc: Paolo Abeni <pabeni@redhat.com>
cc: linux-afs@lists.infradead.org
cc: netdev@vger.kernel.org

net/rxrpc/call_event.c

index 58826710322def3025892194c336810e21621f67..ef28ebf37c7d14d453a344afc598adcaf1c12827 100644 (file)
@@ -450,7 +450,9 @@ bool rxrpc_input_call_event(struct rxrpc_call *call, struct sk_buff *skb)
                rxrpc_send_ACK(call, RXRPC_ACK_PING, 0,
                               rxrpc_propose_ack_ping_for_lost_ack);
 
-       if (resend && __rxrpc_call_state(call) != RXRPC_CALL_CLIENT_RECV_REPLY)
+       if (resend &&
+           __rxrpc_call_state(call) != RXRPC_CALL_CLIENT_RECV_REPLY &&
+           !test_bit(RXRPC_CALL_TX_ALL_ACKED, &call->flags))
                rxrpc_resend(call, NULL);
 
        if (test_and_clear_bit(RXRPC_CALL_RX_IS_IDLE, &call->flags))