[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAM_iQpUDnPfVayQv7Q+ZtC_2_ZbX9MRX=514gFpF3E6XY+GtSA@mail.gmail.com>
Date: Fri, 11 Nov 2016 16:55:11 -0800
From: Cong Wang <xiyou.wangcong@...il.com>
To: "Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>
Cc: Rolf Neugebauer <rolf.neugebauer@...ker.com>,
LKML <linux-kernel@...r.kernel.org>,
Linux Kernel Network Developers <netdev@...r.kernel.org>,
Justin Cormack <justin.cormack@...ker.com>,
Ian Campbell <ian.campbell@...ker.com>
Subject: Re: Long delays creating a netns after deleting one (possibly RCU related)
On Fri, Nov 11, 2016 at 4:23 PM, Paul E. McKenney
<paulmck@...ux.vnet.ibm.com> wrote:
>
> Ah! This net_mutex is different than RTNL. Should synchronize_net() be
> modified to check for net_mutex being held in addition to the current
> checks for RTNL being held?
>
Good point!
Like commit be3fc413da9eb17cce0991f214ab0, checking
for net_mutex for this case seems to be an optimization, I assume
synchronize_rcu_expedited() and synchronize_rcu() have the same
behavior...
diff --git a/net/core/dev.c b/net/core/dev.c
index eaad4c2..3415b6b 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -7762,7 +7762,7 @@ EXPORT_SYMBOL(free_netdev);
void synchronize_net(void)
{
might_sleep();
- if (rtnl_is_locked())
+ if (rtnl_is_locked() || lockdep_is_held(&net_mutex))
synchronize_rcu_expedited();
else
synchronize_rcu();
Powered by blists - more mailing lists