From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Dumazet Subject: Re: [net-next,v3] tcp: Improve setsockopt() TCP_USER_TIMEOUT accuracy Date: Tue, 10 Jul 2018 19:04:21 -0700 Message-ID: <46861e12-1ae5-374f-e907-87ba6241de5f@gmail.com> References: <20180710065147.27647-1-jmaxwell37@gmail.com> <3f856638-52bc-6630-a3d2-2b50f1bf7e48@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Cc: David Miller , Eric Dumazet , Neal Cardwell , David Laight , kuznet , yoshfuji , Netdev , LKML , Jon Maxwell To: Jonathan Maxwell , Eric Dumazet Return-path: Received: from mail-pf0-f194.google.com ([209.85.192.194]:38124 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732348AbeGKCGQ (ORCPT ); Tue, 10 Jul 2018 22:06:16 -0400 In-Reply-To: Content-Language: en-US Sender: netdev-owner@vger.kernel.org List-ID: On 07/10/2018 05:33 PM, Jonathan Maxwell wrote: > On Tue, Jul 10, 2018 at 10:48 PM, Eric Dumazet wrote: >> >> >> On 07/10/2018 05:38 AM, Eric Dumazet wrote: >> >>> Note that if we always do jiffies_to_msecs(icsk->icsk_user_timeout) in TCP, >>> we also could change the convention and store msecs in this field instead of jiffies. >>> >>> That would eliminate the msecs_to_jiffies() and jiffies_to_msecs() dance. >>> >>> (That would be done in a patch of its own, of course) >> >> tcp_keepalive_timer() does use icsk->icsk_user_timeout directly in jiffies unit, >> but considering keeapalive timers are rarely used, this point would have to >> do the msecs_to_jiffies() conversion. > > and also if icsk->icsk_user_timeout = 0, then timeout in retransmits_timed_out() > is in jiffies and that would need to addressed. Absolutely, this is what I was suggesting. Pseudo code for this part, before your changes. diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c index 3b3611729928f77934e0298bb248e55c7a7c5def..cae7bbc956ed51e9d381650957f54550cc0967d9 100644 --- a/net/ipv4/tcp_timer.c +++ b/net/ipv4/tcp_timer.c @@ -183,8 +183,9 @@ static bool retransmits_timed_out(struct sock *sk, else timeout = ((2 << linear_backoff_thresh) - 1) * rto_base + (boundary - linear_backoff_thresh) * TCP_RTO_MAX; + timeout = jiffies_to_msecs(timeout)' } - return (tcp_time_stamp(tcp_sk(sk)) - start_ts) >= jiffies_to_msecs(timeout); + return (tcp_time_stamp(tcp_sk(sk)) - start_ts) >= timeout; } /* A write timeout has occurred. Process the after effects. */