]> git.baikalelectronics.ru Git - kernel.git/commit
tcp: enable xmit timer fix by having TLP use time when RTO should fire
authorNeal Cardwell <ncardwell@google.com>
Thu, 3 Aug 2017 13:19:53 +0000 (09:19 -0400)
committerDavid S. Miller <davem@davemloft.net>
Thu, 3 Aug 2017 22:38:30 +0000 (15:38 -0700)
commit539a06d6542f35bae638e477a6e7ac1c307aa5bd
treef8d6bda5f3b60b508ffc9b9ceac83b5c9a17570b
parent509057595c79258f7eaf6f4f9272513e2111cbaa
tcp: enable xmit timer fix by having TLP use time when RTO should fire

Have tcp_schedule_loss_probe() base the TLP scheduling decision based
on when the RTO *should* fire. This is to enable the upcoming xmit
timer fix in this series, where tcp_schedule_loss_probe() cannot
assume that the last timer installed was an RTO timer (because we are
no longer doing the "rearm RTO, rearm RTO, rearm TLP" dance on every
ACK). So tcp_schedule_loss_probe() must independently figure out when
an RTO would want to fire.

In the new TLP implementation following in this series, we cannot
assume that icsk_timeout was set based on an RTO; after processing a
cumulative ACK the icsk_timeout we see can be from a previous TLP or
RTO. So we need to independently recalculate the RTO time (instead of
reading it out of icsk_timeout). Removing this dependency on the
nature of icsk_timeout makes things a little easier to reason about
anyway.

Note that the old and new code should be equivalent, since they are
both saying: "if the RTO is in the future, but at an earlier time than
the normal TLP time, then set the TLP timer to fire when the RTO would
have fired".

Fixes: 182be3681db6 ("tcp: Tail loss probe (TLP)")
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: Nandita Dukkipati <nanditad@google.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_output.c