From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754683AbdKAOOU (ORCPT ); Wed, 1 Nov 2017 10:14:20 -0400 Received: from mail-lf0-f68.google.com ([209.85.215.68]:53531 "EHLO mail-lf0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754625AbdKAOOS (ORCPT ); Wed, 1 Nov 2017 10:14:18 -0400 X-Google-Smtp-Source: ABhQp+S1Z3q44iAjLO5LYynQLdmssV/QYEpE5pkNPHibvJaXtARc2gO+stj2/jJ2Akgsd9am6J2f1Q== Date: Wed, 1 Nov 2017 15:13:51 +0100 From: Stephen Hemminger To: Lawrence Brakmo Cc: Konstantin Khlebnikov , "netdev@vger.kernel.org" , "David S. Miller" , Alexey Kuznetsov , Hideaki YOSHIFUJI , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH] tcp_nv: fix division by zero in tcpnv_acked() Message-ID: <20171101151351.42e699cf@shemminger-XPS-13-9360> In-Reply-To: <5FF5EDEE-FF34-43E0-9DFA-6CBDB206360D@fb.com> References: <150954313588.153848.10192893966808917578.stgit@buzz> <5FF5EDEE-FF34-43E0-9DFA-6CBDB206360D@fb.com> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 1 Nov 2017 13:47:17 +0000 Lawrence Brakmo wrote: > Thank you for finding and fixing this. > > On 11/1/17, 6:32 AM, "Konstantin Khlebnikov" wrote: > > Average RTT could become zero. This happened in real life at least twice. > This patch treats zero as 1us. > > Signed-off-by: Konstantin Khlebnikov khlebnikov@yandex-team.ru > Acked-by: Lawrence Brakmo > --- > net/ipv4/tcp_nv.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/net/ipv4/tcp_nv.c b/net/ipv4/tcp_nv.c > index 1ff73982e28c..125fc1450b01 100644 > --- a/net/ipv4/tcp_nv.c > +++ b/net/ipv4/tcp_nv.c > @@ -252,7 +252,7 @@ static void tcpnv_acked(struct sock *sk, const struct ack_sample *sample) > > /* rate in 100's bits per second */ > rate64 = ((u64)sample->in_flight) * 8000000; > - rate = (u32)div64_u64(rate64, (u64)(avg_rtt * 100)); > + rate = (u32)div64_u64(rate64, (u64)(avg_rtt ?: 1) * 100); Why is this code using expensive 64 bit by 64 bit divide when avg_rtt should never be bigger than 32 bits?