rxrpc: Obtain RTT data by requesting ACKs on DATA packets
In addition to sending a PING ACK to gain RTT data, we can set the
RXRPC_REQUEST_ACK flag on a DATA packet and get a REQUESTED-ACK ACK. The
ACK packet contains the serial number of the packet it is in response to,
so we can look through the Tx buffer for a matching DATA packet.
This requires that the data packets be stamped with the time of
transmission as a ktime rather than having the resend_at time in jiffies.
This further requires the resend code to do the resend determination in
ktimes and convert to jiffies to set the timer.
Signed-off-by: David Howells <dhowells@redhat.com>
diff --git a/net/rxrpc/output.c b/net/rxrpc/output.c
index 0d89cd3..db01fbb 100644
--- a/net/rxrpc/output.c
+++ b/net/rxrpc/output.c
@@ -300,9 +300,12 @@
goto send_fragmentable;
done:
- if (ret == 0) {
- sp->resend_at = jiffies + rxrpc_resend_timeout;
+ if (ret >= 0) {
+ skb->tstamp = ktime_get_real();
+ smp_wmb();
sp->hdr.serial = serial;
+ if (whdr.flags & RXRPC_REQUEST_ACK)
+ trace_rxrpc_rtt_tx(call, rxrpc_rtt_tx_data, serial);
}
_leave(" = %d [%u]", ret, call->peer->maxdata);
return ret;