]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
rxrpc: Don't use received skbuff timestamps
authorDavid Howells <dhowells@redhat.com>
Wed, 4 Dec 2024 07:46:53 +0000 (07:46 +0000)
committerJakub Kicinski <kuba@kernel.org>
Mon, 9 Dec 2024 21:48:29 +0000 (13:48 -0800)
Don't use received skbuff timestamps, but rather set a timestamp when an
ack is processed so that the time taken to get to rxrpc_input_ack() is
included in the RTT.

The timestamp of the latest ACK received is tracked in
call->acks_latest_ts.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org
Link: https://patch.msgid.link/20241204074710.990092-26-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/rxrpc/input.c
net/rxrpc/local_object.c

index 41b4fb56f96cd945bb1ea86e4ca1111b79b59919..c682e95e15dcaf5a7c32b98c3f009edf3fcec41d 100644 (file)
@@ -1037,14 +1037,6 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
        rxrpc_inc_stat(call->rxnet, stat_rx_acks[summary.ack_reason]);
        prefetch(call->tx_queue);
 
-       if (summary.acked_serial != 0) {
-               if (summary.ack_reason == RXRPC_ACK_PING_RESPONSE)
-                       rxrpc_complete_rtt_probe(call, skb->tstamp, summary.acked_serial,
-                                                ack_serial, rxrpc_rtt_rx_ping_response);
-               else
-                       summary.rtt_sample_avail = true;
-       }
-
        /* If we get an EXCEEDS_WINDOW ACK from the server, it probably
         * indicates that the client address changed due to NAT.  The server
         * lost the call because it switched to a different peer.
@@ -1087,7 +1079,7 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
        if (nr_acks > 0)
                skb_condense(skb);
 
-       call->acks_latest_ts = skb->tstamp;
+       call->acks_latest_ts = ktime_get_real();
        call->acks_hard_ack = hard_ack;
        call->acks_prev_seq = prev_pkt;
 
@@ -1108,6 +1100,15 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
        if (hard_ack + 1 == 0)
                return rxrpc_proto_abort(call, 0, rxrpc_eproto_ackr_zero);
 
+       if (summary.acked_serial != 0) {
+               if (summary.ack_reason == RXRPC_ACK_PING_RESPONSE)
+                       rxrpc_complete_rtt_probe(call, call->acks_latest_ts,
+                                                summary.acked_serial, ack_serial,
+                                                rxrpc_rtt_rx_ping_response);
+               else
+                       summary.rtt_sample_avail = true;
+       }
+
        /* Ignore ACKs unless we are or have just been transmitting. */
        switch (__rxrpc_call_state(call)) {
        case RXRPC_CALL_CLIENT_SEND_REQUEST:
index 2792d230460532625cfb6c810d09d51f353d9f3c..a74a4b43904fb14025da1991e7833b4ebc217ec3 100644 (file)
@@ -215,9 +215,6 @@ static int rxrpc_open_socket(struct rxrpc_local *local, struct net *net)
 
                /* we want to set the don't fragment bit */
                rxrpc_local_dont_fragment(local, true);
-
-               /* We want receive timestamps. */
-               sock_enable_timestamps(usk);
                break;
 
        default: