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>
This commit is contained in:
@@ -300,9 +300,12 @@ int rxrpc_send_data_packet(struct rxrpc_call *call, struct sk_buff *skb)
|
||||
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;
|
||||
|
Reference in New Issue
Block a user