diff options
author | David Howells <dhowells@redhat.com> | 2016-09-23 13:17:33 +0100 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2016-09-23 13:17:52 +0100 |
commit | b24d2891cfb0a7975b0039743439c98fe7b7dea7 (patch) | |
tree | 0085b06165816601606819a93e416cd35a6f4fa0 /net/rxrpc/sendmsg.c | |
parent | e12934d9806e61d2727069cd56757987f3da76aa (diff) | |
download | op-kernel-dev-b24d2891cfb0a7975b0039743439c98fe7b7dea7.zip op-kernel-dev-b24d2891cfb0a7975b0039743439c98fe7b7dea7.tar.gz |
rxrpc: Preset timestamp on Tx sk_buffs
Set the timestamp on sk_buffs holding packets to be transmitted before
queueing them because the moment the packet is on the queue it can be seen
by the retransmission algorithm - which may see a completely random
timestamp.
If the retransmission algorithm sees such a timestamp, it may retransmit
the packet and, in future, tell the congestion management algorithm that
the retransmit timer expired.
Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'net/rxrpc/sendmsg.c')
-rw-r--r-- | net/rxrpc/sendmsg.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/net/rxrpc/sendmsg.c b/net/rxrpc/sendmsg.c index ca7c3be..ca3811b 100644 --- a/net/rxrpc/sendmsg.c +++ b/net/rxrpc/sendmsg.c @@ -99,6 +99,11 @@ static void rxrpc_queue_packet(struct rxrpc_call *call, struct sk_buff *skb, ASSERTCMP(seq, ==, call->tx_top + 1); + /* We have to set the timestamp before queueing as the retransmit + * algorithm can see the packet as soon as we queue it. + */ + skb->tstamp = ktime_get_real(); + ix = seq & RXRPC_RXTX_BUFF_MASK; rxrpc_get_skb(skb, rxrpc_skb_tx_got); call->rxtx_annotations[ix] = RXRPC_TX_ANNO_UNACK; |