linux/net/rxrpc
David Howells df0562a72d rxrpc: Delay the resend timer to allow for nsec->jiffies conv error
When determining the resend timer value, we have a value in nsec but the
timer is in jiffies which may be a million or more times more coarse.
nsecs_to_jiffies() rounds down - which means that the resend timeout
expressed as jiffies is very likely earlier than the one expressed as
nanoseconds from which it was derived.

The problem is that rxrpc_resend() gets triggered by the timer, but can't
then find anything to resend yet.  It sets the timer again - but gets
kicked off immediately again and again until the nanosecond-based expiry
time is reached and we actually retransmit.

Fix this by adding 1 to the jiffies-based resend_at value to counteract the
rounding and make sure that the timer happens after the nanosecond-based
expiry is passed.

Alternatives would be to adjust the timestamp on the packets to align
with the jiffie scale or to switch back to using jiffie-timestamps.

Signed-off-by: David Howells <dhowells@redhat.com>
2016-09-24 23:49:46 +01:00
..
af_rxrpc.c rxrpc: Improve skb tracing 2016-09-17 11:24:04 +01:00
ar-internal.h rxrpc: Reinitialise the call ACK and timer state for client reply phase 2016-09-24 23:49:46 +01:00
call_accept.c rxrpc: Add a tracepoint to follow packets in the Rx buffer 2016-09-17 11:24:03 +01:00
call_event.c rxrpc: Delay the resend timer to allow for nsec->jiffies conv error 2016-09-24 23:49:46 +01:00
call_object.c rxrpc: Add a tracepoint for the call timer 2016-09-23 15:49:19 +01:00
conn_client.c rxrpc: Add connection tracepoint and client conn state tracepoint 2016-09-17 11:24:03 +01:00
conn_event.c rxrpc: Add data Tx tracepoint and adjust Tx ACK tracepoint 2016-09-23 15:49:19 +01:00
conn_object.c rxrpc: Don't store the rxrpc header in the Tx queue sk_buffs 2016-09-22 01:23:50 +01:00
conn_service.c rxrpc: Add connection tracepoint and client conn state tracepoint 2016-09-17 11:24:03 +01:00
input.c rxrpc: Reinitialise the call ACK and timer state for client reply phase 2016-09-24 23:49:46 +01:00
insecure.c rxrpc: Rewrite the data and ack handling code 2016-09-08 11:10:12 +01:00
Kconfig rxrpc: Add config to inject packet loss 2016-09-17 11:24:04 +01:00
key.c rxrpc: Use structs to hold connection params and protocol info 2016-06-22 09:09:59 +01:00
local_event.c rxrpc: Improve skb tracing 2016-09-17 11:24:04 +01:00
local_object.c rxrpc: Make IPv6 support conditional on CONFIG_IPV6 2016-09-17 03:58:45 -04:00
Makefile rxrpc: Split sendmsg from packet transmission code 2016-09-04 21:41:39 +01:00
misc.c rxrpc: Reinitialise the call ACK and timer state for client reply phase 2016-09-24 23:49:46 +01:00
output.c rxrpc: Send an ACK after every few DATA packets we receive 2016-09-24 18:05:26 +01:00
peer_event.c rxrpc: Add per-peer RTT tracker 2016-09-22 01:26:25 +01:00
peer_object.c rxrpc: Reduce the number of ACK-Requests sent 2016-09-22 08:49:20 +01:00
proc.c rxrpc: Add IPv6 support 2016-09-13 23:09:13 +01:00
recvmsg.c rxrpc: Include the last reply DATA serial number in the final ACK 2016-09-24 23:49:46 +01:00
rxkad.c rxrpc: Don't store the rxrpc header in the Tx queue sk_buffs 2016-09-22 01:23:50 +01:00
security.c rxrpc: Rewrite the data and ack handling code 2016-09-08 11:10:12 +01:00
sendmsg.c rxrpc: Add a tracepoint for the call timer 2016-09-23 15:49:19 +01:00
skbuff.c rxrpc: Improve skb tracing 2016-09-17 11:24:04 +01:00
sysctl.c rxrpc: Obtain RTT data by requesting ACKs on DATA packets 2016-09-22 08:21:24 +01:00
utils.c rxrpc: Make IPv6 support conditional on CONFIG_IPV6 2016-09-17 03:58:45 -04:00