From patchwork Tue Jul 31 16:03:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matteo Croce X-Patchwork-Id: 951697 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41g1T0166Rz9s3N for ; Wed, 1 Aug 2018 02:03:48 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732477AbeGaRoi (ORCPT ); Tue, 31 Jul 2018 13:44:38 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:55109 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732419AbeGaRoi (ORCPT ); Tue, 31 Jul 2018 13:44:38 -0400 Received: by mail-wm0-f68.google.com with SMTP id c14-v6so3679534wmb.4 for ; Tue, 31 Jul 2018 09:03:38 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=kbamGR0f+Fs6rqXcsvFpuECTmWLUMt8b4q9CY2bwYaU=; b=kTr6r4+Z7CX3y9tDtBdELUU5XHVIWVYy4JmhwuJgG1c1naNgTGevrIwz1JBEUL2c6J Li5a1q9Kl5P/nXOx4tG3vb5yP6aE6EPJ87SKxzfa0Ioi2Sayc2j1IhvmJoNNw2BAjRlQ hap+Pr0NnKL+UTeBp8GxMq/GacFavcrVWLdM05/YwADD20H0Vx4tPQXF3qyENGcQrcPR vitVXi2oiUeA3fNVRsl7GtEpsuEbllNoNASeARFRH72r60XL5vuc5SNj0qDH42F3nVPz gIptAkRUKGdqgw3PiBcpDr+a4WcI1l5e0UsHu/sRp7v70fFIUkyV16Jo1EEoNDvO72Y0 2umQ== X-Gm-Message-State: AOUpUlF/NpGKtpt989h2FN5NLsFtH9ufJCSe/xV7wxWWxGcrsvjYjpPR ymEhWWAtPg7NMuazGyZ4bsEIMw== X-Google-Smtp-Source: AAOMgpe7blpd2q7dMl90Nq33muDbHNFHtFRBBoyPyCVyfD0suLGyRRdTlWnChY6ATGjmLJM/FL10rQ== X-Received: by 2002:a1c:dacb:: with SMTP id r194-v6mr215387wmg.56.1533053017260; Tue, 31 Jul 2018 09:03:37 -0700 (PDT) Received: from mcroce-redhat.redhat.com (host5-113-dynamic.33-79-r.retail.telecomitalia.it. [79.33.113.5]) by smtp.gmail.com with ESMTPSA id x129-v6sm3968884wme.11.2018.07.31.09.03.35 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 31 Jul 2018 09:03:36 -0700 (PDT) From: Matteo Croce To: Wensong Zhang , Simon Horman , Julian Anastasov , lvs-devel@vger.kernel.org, netdev@vger.kernel.org, Jozsef Kadlecsik Cc: Pablo Neira Ayuso , Florian Westphal , netfilter-devel@vger.kernel.org, Eric Dumazet Subject: [PATCH net v2 1/2] jiffies: add utility function to calculate delta in ms Date: Tue, 31 Jul 2018 18:03:32 +0200 Message-Id: <20180731160333.12215-2-mcroce@redhat.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180731160333.12215-1-mcroce@redhat.com> References: <20180731160333.12215-1-mcroce@redhat.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org add jiffies_delta_to_msecs() helper func to calculate the delta between two times and eventually 0 if negative. Suggested-by: Eric Dumazet Signed-off-by: Matteo Croce Reviewed-by: Eric Dumazet --- include/linux/jiffies.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h index a27cf6652327..fa928242567d 100644 --- a/include/linux/jiffies.h +++ b/include/linux/jiffies.h @@ -447,6 +447,11 @@ static inline clock_t jiffies_delta_to_clock_t(long delta) return jiffies_to_clock_t(max(0L, delta)); } +static inline unsigned int jiffies_delta_to_msecs(long delta) +{ + return jiffies_to_msecs(max(0L, delta)); +} + extern unsigned long clock_t_to_jiffies(unsigned long x); extern u64 jiffies_64_to_clock_t(u64 x); extern u64 nsec_to_clock_t(u64 x); From patchwork Tue Jul 31 16:03:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matteo Croce X-Patchwork-Id: 951696 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41g1Sv4sQSz9s3N for ; Wed, 1 Aug 2018 02:03:43 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732488AbeGaRoj (ORCPT ); Tue, 31 Jul 2018 13:44:39 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:45574 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732430AbeGaRoj (ORCPT ); Tue, 31 Jul 2018 13:44:39 -0400 Received: by mail-wr1-f68.google.com with SMTP id f12-v6so7328899wrv.12 for ; Tue, 31 Jul 2018 09:03:39 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=vwNnIvTAoM/tQmpdhcWOS3MRx3bU9aIdKCgDxGFWHQA=; b=RUIaCfnz1M54JXLEaMKAlVrAMQ8I6XcEHVQUnngZzRfcwpIojOaDJt9eY/Up6eJYS4 qNiA5D2AYjY5bjm1GbJ0hrsT7QgqtOgeI/TJxOAwl/pOoFXYccbL0hcKEt2iBmyrOdl5 7h6NaoOAnSSFLY8z7UYi1eNN+QC6zjBSlsuRAl1Xl4Cift9xCFtvUKfG0WkVZ5jOM/A9 cXXkZ1r+8aevNkxQ1cSAEEX6OI5Ahgu8RBq7rg8y0KUy0WvVrEYgkzYu2vjkatOKWcSU y+RC4LRU+masPFkE4Dp9hV4m+nRFTIGRCpE5Z+VCvNRyxj1hN13pxZhQA776Q8wbThSb hrIw== X-Gm-Message-State: AOUpUlGNP1DbDdiNbbZg9J6uJmoPe2raXgVifeKt1yuxTxePWtGFL6FN 7vbtXRDbkNohkFQWVJfD1hctJQ== X-Google-Smtp-Source: AAOMgpffxulexlCHNcUx3RyDylDGhnOx5QMJPRP5w0wnvWsKyN9NTz6yDFr6mAyfVABlMXtKIjnPHw== X-Received: by 2002:a5d:4643:: with SMTP id j3-v6mr21230473wrs.52.1533053018860; Tue, 31 Jul 2018 09:03:38 -0700 (PDT) Received: from mcroce-redhat.redhat.com (host5-113-dynamic.33-79-r.retail.telecomitalia.it. [79.33.113.5]) by smtp.gmail.com with ESMTPSA id x129-v6sm3968884wme.11.2018.07.31.09.03.37 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 31 Jul 2018 09:03:37 -0700 (PDT) From: Matteo Croce To: Wensong Zhang , Simon Horman , Julian Anastasov , lvs-devel@vger.kernel.org, netdev@vger.kernel.org, Jozsef Kadlecsik Cc: Pablo Neira Ayuso , Florian Westphal , netfilter-devel@vger.kernel.org, Eric Dumazet Subject: [PATCH net v2 2/2] ipvs: don't show negative times in ip_vs_conn Date: Tue, 31 Jul 2018 18:03:33 +0200 Message-Id: <20180731160333.12215-3-mcroce@redhat.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180731160333.12215-1-mcroce@redhat.com> References: <20180731160333.12215-1-mcroce@redhat.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Since commit 500462a9de65 ("timers: Switch to a non-cascading wheel"), timers duration can last even 12.5% more than the scheduled interval. IPVS has two handlers, /proc/net/ip_vs_conn and /proc/net/ip_vs_conn_sync, which shows the remaining time before that a connection expires. The default expire time for a connection is 60 seconds, and the expiration timer can fire even 4 seconds later than the scheduled time. The expiration time is calculated subtracting jiffies to the scheduled expiration time, and it's shown as a huge number when the timer fires late, since both values are unsigned. This can confuse script and tools which relies on it, like ipvsadm: root@mcroce-redhat:~# while ipvsadm -lc |grep SYN_RECV; do sleep 1 ; done TCP 00:05 SYN_RECV [fc00:1::1]:55732 [fc00:1::2]:8000 [fc00:2000::1]:8000 TCP 00:04 SYN_RECV [fc00:1::1]:55732 [fc00:1::2]:8000 [fc00:2000::1]:8000 TCP 00:03 SYN_RECV [fc00:1::1]:55732 [fc00:1::2]:8000 [fc00:2000::1]:8000 TCP 00:02 SYN_RECV [fc00:1::1]:55732 [fc00:1::2]:8000 [fc00:2000::1]:8000 TCP 00:01 SYN_RECV [fc00:1::1]:55732 [fc00:1::2]:8000 [fc00:2000::1]:8000 TCP 00:00 SYN_RECV [fc00:1::1]:55732 [fc00:1::2]:8000 [fc00:2000::1]:8000 TCP 68719476:44 SYN_RECV [fc00:1::1]:55732 [fc00:1::2]:8000 [fc00:2000::1]:8000 TCP 68719476:43 SYN_RECV [fc00:1::1]:55732 [fc00:1::2]:8000 [fc00:2000::1]:8000 TCP 68719476:42 SYN_RECV [fc00:1::1]:55732 [fc00:1::2]:8000 [fc00:2000::1]:8000 TCP 68719476:41 SYN_RECV [fc00:1::1]:55732 [fc00:1::2]:8000 [fc00:2000::1]:8000 TCP 68719476:40 SYN_RECV [fc00:1::1]:55732 [fc00:1::2]:8000 [fc00:2000::1]:8000 TCP 68719476:39 SYN_RECV [fc00:1::1]:55732 [fc00:1::2]:8000 [fc00:2000::1]:8000 Signed-off-by: Matteo Croce --- net/netfilter/ipvs/ip_vs_conn.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/net/netfilter/ipvs/ip_vs_conn.c b/net/netfilter/ipvs/ip_vs_conn.c index 99e0aa350dc5..615286dcf4c0 100644 --- a/net/netfilter/ipvs/ip_vs_conn.c +++ b/net/netfilter/ipvs/ip_vs_conn.c @@ -1102,24 +1102,28 @@ static int ip_vs_conn_seq_show(struct seq_file *seq, void *v) #ifdef CONFIG_IP_VS_IPV6 if (cp->af == AF_INET6) seq_printf(seq, "%-3s %pI6 %04X %pI6 %04X " - "%s %04X %-11s %7lu%s\n", + "%s %04X %-11s %7u%s\n", ip_vs_proto_name(cp->protocol), &cp->caddr.in6, ntohs(cp->cport), &cp->vaddr.in6, ntohs(cp->vport), dbuf, ntohs(cp->dport), ip_vs_state_name(cp->protocol, cp->state), - (cp->timer.expires-jiffies)/HZ, pe_data); + jiffies_delta_to_msecs(cp->timer.expires - + jiffies) / 1000, + pe_data); else #endif seq_printf(seq, "%-3s %08X %04X %08X %04X" - " %s %04X %-11s %7lu%s\n", + " %s %04X %-11s %7u%s\n", ip_vs_proto_name(cp->protocol), ntohl(cp->caddr.ip), ntohs(cp->cport), ntohl(cp->vaddr.ip), ntohs(cp->vport), dbuf, ntohs(cp->dport), ip_vs_state_name(cp->protocol, cp->state), - (cp->timer.expires-jiffies)/HZ, pe_data); + jiffies_delta_to_msecs(cp->timer.expires - + jiffies) / 1000, + pe_data); } return 0; } @@ -1164,26 +1168,28 @@ static int ip_vs_conn_sync_seq_show(struct seq_file *seq, void *v) #ifdef CONFIG_IP_VS_IPV6 if (cp->af == AF_INET6) seq_printf(seq, "%-3s %pI6 %04X %pI6 %04X " - "%s %04X %-11s %-6s %7lu\n", + "%s %04X %-11s %-6s %7u\n", ip_vs_proto_name(cp->protocol), &cp->caddr.in6, ntohs(cp->cport), &cp->vaddr.in6, ntohs(cp->vport), dbuf, ntohs(cp->dport), ip_vs_state_name(cp->protocol, cp->state), ip_vs_origin_name(cp->flags), - (cp->timer.expires-jiffies)/HZ); + jiffies_delta_to_msecs(cp->timer.expires - + jiffies) / 1000); else #endif seq_printf(seq, "%-3s %08X %04X %08X %04X " - "%s %04X %-11s %-6s %7lu\n", + "%s %04X %-11s %-6s %7u\n", ip_vs_proto_name(cp->protocol), ntohl(cp->caddr.ip), ntohs(cp->cport), ntohl(cp->vaddr.ip), ntohs(cp->vport), dbuf, ntohs(cp->dport), ip_vs_state_name(cp->protocol, cp->state), ip_vs_origin_name(cp->flags), - (cp->timer.expires-jiffies)/HZ); + jiffies_delta_to_msecs(cp->timer.expires - + jiffies) / 1000); } return 0; }