On Fri, Nov 11, 2016 at 4:23 PM, Paul E. McKenney <paul...@linux.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();