Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'net-avoid-slow-rcu'

Eric Dumazet says:

====================
net: avoid slow rcu synchronizations in cleanup_net()

RTNL is a contended mutex, we prefer to expedite rcu synchronizations
in contexts we hold RTNL.

Similarly, cleanup_net() is a single threaded critical component and
should also use synchronize_rcu_expedited() even when not holding RTNL.

First patch removes a barrier with no clear purpose in ipv6_mc_down()
====================

Signed-off-by: David S. Miller <davem@davemloft.net>

+6 -7
+2 -2
net/bridge/br_vlan.c
··· 841 841 vg = br_vlan_group(br); 842 842 __vlan_flush(br, NULL, vg); 843 843 RCU_INIT_POINTER(br->vlgrp, NULL); 844 - synchronize_rcu(); 844 + synchronize_net(); 845 845 __vlan_group_free(vg); 846 846 } 847 847 ··· 1372 1372 vg = nbp_vlan_group(port); 1373 1373 __vlan_flush(port->br, port, vg); 1374 1374 RCU_INIT_POINTER(port->vlgrp, NULL); 1375 - synchronize_rcu(); 1375 + synchronize_net(); 1376 1376 __vlan_group_free(vg); 1377 1377 } 1378 1378
+1 -1
net/core/dev.c
··· 1239 1239 netdev_name_node_del(dev->name_node); 1240 1240 write_unlock(&dev_base_lock); 1241 1241 1242 - synchronize_rcu(); 1242 + synchronize_net(); 1243 1243 1244 1244 write_lock(&dev_base_lock); 1245 1245 netdev_name_node_add(net, dev->name_node);
+1 -1
net/core/net_namespace.c
··· 622 622 * the rcu_barrier() below isn't sufficient alone. 623 623 * Also the pre_exit() and exit() methods need this barrier. 624 624 */ 625 - synchronize_rcu(); 625 + synchronize_rcu_expedited(); 626 626 627 627 rtnl_lock(); 628 628 list_for_each_entry_reverse(ops, &pernet_list, list) {
+1 -1
net/ipv4/fib_trie.c
··· 501 501 502 502 if (tnode_free_size >= READ_ONCE(sysctl_fib_sync_mem)) { 503 503 tnode_free_size = 0; 504 - synchronize_rcu(); 504 + synchronize_net(); 505 505 } 506 506 } 507 507
-1
net/ipv6/mcast.c
··· 2719 2719 /* Should stop work after group drop. or we will 2720 2720 * start work again in mld_ifc_event() 2721 2721 */ 2722 - synchronize_net(); 2723 2722 mld_query_stop_work(idev); 2724 2723 mld_report_stop_work(idev); 2725 2724
+1 -1
net/netfilter/nf_conntrack_core.c
··· 2530 2530 * netfilter framework. Roll on, two-stage module 2531 2531 * delete... 2532 2532 */ 2533 - synchronize_net(); 2533 + synchronize_rcu_expedited(); 2534 2534 i_see_dead_people: 2535 2535 busy = 0; 2536 2536 list_for_each_entry(net, net_exit_list, exit_list) {