[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20090623150444.22490.27931.stgit@localhost>
Date: Tue, 23 Jun 2009 17:04:44 +0200
From: Jesper Dangaard Brouer <hawk@...x.dk>
To: "David S. Miller" <davem@...emloft.net>
Cc: Jesper Dangaard Brouer <hawk@...x.dk>,
"Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>,
netdev@...r.kernel.org, linux-kernel@...r.kernel.org,
dougthompson@...ssion.com, bluesmoke-devel@...ts.sourceforge.net,
axboe@...nel.dk, "Patrick McHardy" <kaber@...sh.net>,
christine.caulfield@...glemail.com, Trond.Myklebust@...app.com,
linux-wireless@...r.kernel.org, johannes@...solutions.net,
yoshfuji@...ux-ipv6.org, shemminger@...ux-foundation.org,
linux-nfs@...r.kernel.org, bfields@...ldses.org, neilb@...e.de,
linux-ext4@...r.kernel.org, tytso@....edu, adilger@....com,
netfilter-devel@...r.kernel.org
Subject: [PATCH 10/10] nf_conntrack: Use rcu_barrier().
I'm not sure which is are most optimal place to call rcu_barrier().
The patch probably calls rcu_barrier() too much, but its a better
safe than sorry approach.
There is embedded some comments that I would like Patrick McHardy
to look at.
Signed-off-by: Jesper Dangaard Brouer <hawk@...x.dk>
---
net/netfilter/nf_conntrack_core.c | 5 +++++
net/netfilter/nf_conntrack_standalone.c | 2 ++
2 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
index 5f72b94..cea4537 100644
--- a/net/netfilter/nf_conntrack_core.c
+++ b/net/netfilter/nf_conntrack_core.c
@@ -1084,6 +1084,8 @@ static void nf_conntrack_cleanup_init_net(void)
{
nf_conntrack_helper_fini();
nf_conntrack_proto_fini();
+ rcu_barrier();
+ /* Need to wait for call_rcu() before dealloc the kmem_cache */
kmem_cache_destroy(nf_conntrack_cachep);
}
@@ -1118,6 +1120,9 @@ void nf_conntrack_cleanup(struct net *net)
/* This makes sure all current packets have passed through
netfilter framework. Roll on, two-stage module
delete... */
+ /* hawk@...x.dk 2009-06-20: Think this should be replaced by a
+ rcu_barrier() ???
+ */
synchronize_net();
nf_conntrack_cleanup_net(net);
diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c
index 1935153..29c6cd0 100644
--- a/net/netfilter/nf_conntrack_standalone.c
+++ b/net/netfilter/nf_conntrack_standalone.c
@@ -500,6 +500,8 @@ static void nf_conntrack_net_exit(struct net *net)
nf_conntrack_standalone_fini_sysctl(net);
nf_conntrack_standalone_fini_proc(net);
nf_conntrack_cleanup(net);
+ /* hawk@...x.dk: Think rcu_barrier() should to be called earlier? */
+ rcu_barrier(); /* Wait for completion of call_rcu()'s */
}
static struct pernet_operations nf_conntrack_net_ops = {
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists