From patchwork Sat Dec 3 15:45:06 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 702331 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3tWFj95j6bz9t0v for ; Sun, 4 Dec 2016 02:45:33 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b="nFS2fCjK"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753651AbcLCPp1 (ORCPT ); Sat, 3 Dec 2016 10:45:27 -0500 Received: from mail-wm0-f66.google.com ([74.125.82.66]:33213 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753436AbcLCPpV (ORCPT ); Sat, 3 Dec 2016 10:45:21 -0500 Received: by mail-wm0-f66.google.com with SMTP id u144so7035439wmu.0 for ; Sat, 03 Dec 2016 07:45:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=lFqYLqbe742SMkW0efu7PgS0kA/NGX2iK7cmv4BYcKI=; b=nFS2fCjK9cQMoz5qLBXojao5CbfaX6U0pJxbhY2nzNFs5t4FqYkaX6wSlqfkeDdsOT 2afELqevBm8lb8ypLPnk2YY21Jtdk4XYXA0VKaFCPdHciBiRPKwXQuO16rHv+FDrsdWO Ql84+ZfK+KKX5/Q57kt5orx4HvZ8bp1/jFzxCR+Izq9dp7fc9XuJK9OLEvIi8Hpyf3TY d29s25Itjo/57FVhbRqX/p+SD6TlI+1wcy8vRI3O1H8h1drdXXncp58Fkx+qn9ewmAKy t126aQhIZvywcMXK97XVradCCZOnhcAZw4kDg92vS/LuXorERjRzAJ1tRxZU4f62Z0ki jV3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=lFqYLqbe742SMkW0efu7PgS0kA/NGX2iK7cmv4BYcKI=; b=AsHrceMbNu3cJ0ZfsweA+YEjIcbCImLdLHxtPEf80mm/T4L7keYKTZT0zrJYYEhX7i 8JnMAwNhOpK+/JL0Pjs4JOxbd4GTLWX7xp9fF0lmuMBXKY/S4RPglg6n8scNpynM6ydd y0SROxz3jO3XVpxTmdPCv8agC9hTwEISxkdCmMtbLAyLFnNDIbrdO07bnKfV5xGT2Oqh Ykuk7Hy12z46/cTv6X+dVSmjvhGtY2L8AN0v2hy2eAZckwvr8fjVGiRp+JR+dZOj9Aqt QholpGGK30///mJwzq72swBrJ+5yLFCylweEt9diGXe+mwC8WdcAj+g9IsG9HVbiJEzn pR/g== X-Gm-Message-State: AKaTC02accp30ws7BTCYwUaGzqpgbuaCJ5/nw+P/BwOjoppbrHPgNtqYF6oQRSG6bZGwnQ== X-Received: by 10.28.21.1 with SMTP id 1mr2500547wmv.133.1480779919779; Sat, 03 Dec 2016 07:45:19 -0800 (PST) Received: from localhost (jirka.pirko.cz. [84.16.102.26]) by smtp.gmail.com with ESMTPSA id g10sm11127974wjw.18.2016.12.03.07.45.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 03 Dec 2016 07:45:19 -0800 (PST) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, idosch@mellanox.com, eladr@mellanox.com, yotamg@mellanox.com, nogahf@mellanox.com, arkadis@mellanox.com, ogerlitz@mellanox.com, roopa@cumulusnetworks.com, dsa@cumulusnetworks.com, nikolay@cumulusnetworks.com, andy@greyhouse.net, vivien.didelot@savoirfairelinux.com, andrew@lunn.ch, f.fainelli@gmail.com, alexander.h.duyck@intel.com, hannes@stressinduktion.org, kaber@trash.net Subject: [patch net-next v4 09/10] ipv4: fib: Allow for consistent FIB dumping Date: Sat, 3 Dec 2016 16:45:06 +0100 Message-Id: <1480779907-32535-10-git-send-email-jiri@resnulli.us> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1480779907-32535-1-git-send-email-jiri@resnulli.us> References: <1480779907-32535-1-git-send-email-jiri@resnulli.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Ido Schimmel The next patch will enable listeners of the FIB notification chain to request a dump of the FIB tables. However, since RTNL isn't taken during the dump, it's possible for the FIB tables to change mid-dump, which will result in inconsistency between the listener's table and the kernel's. Allow listeners to know about changes that occurred mid-dump, by adding a change sequence counter to each net namespace. The counter is incremented just before a notification is sent in the FIB chain. Signed-off-by: Ido Schimmel Signed-off-by: Jiri Pirko --- include/net/netns/ipv4.h | 3 +++ net/ipv4/fib_frontend.c | 2 ++ net/ipv4/fib_trie.c | 1 + 3 files changed, 6 insertions(+) diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h index 7adf438..f0cf5a1 100644 --- a/include/net/netns/ipv4.h +++ b/include/net/netns/ipv4.h @@ -135,6 +135,9 @@ struct netns_ipv4 { #ifdef CONFIG_IP_ROUTE_MULTIPATH int sysctl_fib_multipath_use_neigh; #endif + + unsigned int fib_seq; /* protected by rtnl_mutex */ + atomic_t rt_genid; }; #endif diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c index 121384b..dbad5a1 100644 --- a/net/ipv4/fib_frontend.c +++ b/net/ipv4/fib_frontend.c @@ -1219,6 +1219,8 @@ static int __net_init ip_fib_net_init(struct net *net) int err; size_t size = sizeof(struct hlist_head) * FIB_TABLE_HASHSZ; + net->ipv4.fib_seq = 0; + /* Avoid false sharing : Use at least a full cache line */ size = max_t(size_t, size, L1_CACHE_BYTES); diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c index 9bfce0d..2891356 100644 --- a/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c @@ -101,6 +101,7 @@ EXPORT_SYMBOL(unregister_fib_notifier); int call_fib_notifiers(struct net *net, enum fib_event_type event_type, struct fib_notifier_info *info) { + net->ipv4.fib_seq++; info->net = net; return atomic_notifier_call_chain(&fib_chain, event_type, info); }