mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
rxrpc: Don't use received skbuff timestamps
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>
This commit is contained in:
parent
dcdff0d8e3
commit
7903d4438b
2 changed files with 10 additions and 12 deletions
|
@ -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]);
|
rxrpc_inc_stat(call->rxnet, stat_rx_acks[summary.ack_reason]);
|
||||||
prefetch(call->tx_queue);
|
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
|
/* If we get an EXCEEDS_WINDOW ACK from the server, it probably
|
||||||
* indicates that the client address changed due to NAT. The server
|
* indicates that the client address changed due to NAT. The server
|
||||||
* lost the call because it switched to a different peer.
|
* 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)
|
if (nr_acks > 0)
|
||||||
skb_condense(skb);
|
skb_condense(skb);
|
||||||
|
|
||||||
call->acks_latest_ts = skb->tstamp;
|
call->acks_latest_ts = ktime_get_real();
|
||||||
call->acks_hard_ack = hard_ack;
|
call->acks_hard_ack = hard_ack;
|
||||||
call->acks_prev_seq = prev_pkt;
|
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)
|
if (hard_ack + 1 == 0)
|
||||||
return rxrpc_proto_abort(call, 0, rxrpc_eproto_ackr_zero);
|
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. */
|
/* Ignore ACKs unless we are or have just been transmitting. */
|
||||||
switch (__rxrpc_call_state(call)) {
|
switch (__rxrpc_call_state(call)) {
|
||||||
case RXRPC_CALL_CLIENT_SEND_REQUEST:
|
case RXRPC_CALL_CLIENT_SEND_REQUEST:
|
||||||
|
|
|
@ -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 */
|
/* we want to set the don't fragment bit */
|
||||||
rxrpc_local_dont_fragment(local, true);
|
rxrpc_local_dont_fragment(local, true);
|
||||||
|
|
||||||
/* We want receive timestamps. */
|
|
||||||
sock_enable_timestamps(usk);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Add table
Reference in a new issue