rxrpc: Preset timestamp on Tx sk_buffs
authorDavid Howells <dhowells@redhat.com>
Fri, 23 Sep 2016 12:17:33 +0000 (13:17 +0100)
committerDavid Howells <dhowells@redhat.com>
Fri, 23 Sep 2016 12:17:52 +0000 (13:17 +0100)
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>
net/rxrpc/sendmsg.c

index ca7c3be60ad279628c5706c3dfb167c62bbdc234..ca3811bfbd177bc1dd6bedadfcf8610fe249b4a7 100644 (file)
@@ -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;