diff options
author | David Howells <dhowells@redhat.com> | 2016-09-22 00:29:31 +0100 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2016-09-22 08:21:24 +0100 |
commit | 50235c4b5a2fb9a9690f02cd1dea6ca047d7f79e (patch) | |
tree | 3dc5a178820b16d5eaef0484fe7751cb4f71375e /net/rxrpc/output.c | |
parent | 77f2efcbdd7133466060198e02c6e8a170c3cd14 (diff) | |
download | linux-stable-50235c4b5a2fb9a9690f02cd1dea6ca047d7f79e.tar.gz linux-stable-50235c4b5a2fb9a9690f02cd1dea6ca047d7f79e.tar.bz2 linux-stable-50235c4b5a2fb9a9690f02cd1dea6ca047d7f79e.zip |
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>
Diffstat (limited to 'net/rxrpc/output.c')
-rw-r--r-- | net/rxrpc/output.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/net/rxrpc/output.c b/net/rxrpc/output.c index 0d89cd3f2c01..db01fbb70d23 100644 --- a/net/rxrpc/output.c +++ b/net/rxrpc/output.c @@ -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; |