bridge: Optimize multiple unregistration
Subsystems (3)
PATCH 1/1 bridge: Optimize multiple unregistration
Speedup module unloading by factorizing synchronize_rcu() calls
Signed-off-by Eric Dumazet <[email protected]>
--- net/bridge/br_if.c | 19 +++++++++---------- 1 files changed, 9 insertions(+), 10 deletions(-)
net/bridge/br_if.c +9 -10
@@ -154,7 +154,7 @@ static void del_nbp(struct net_bridge_port *p) }/* called with RTNL */ -static void del_br (struct net_bridge *br) +static void del_br (struct net_bridge *br,struct list_head *head) {struct net_bridge_port *p, *n;
@@ -165,7 +165,7 @@ static void del_br(struct net_bridge *br)del_timer_sync (&br->gc_timer);br_sysfs_delbr (br->dev); -unregister_netdevice (br->dev); +unregister_netdevice_queue (br->dev, head); }static struct net_device *new_bridge_dev (struct net *net,const char *name)
@@ -323,7 +323,7 @@ int br_del_bridge(struct net *net, const char *name) }else -del_br (netdev_priv (dev)); +del_br (netdev_priv (dev),NULL );rtnl_unlock ();return ret;
@@ -462,15 +462,14 @@ int br_del_if(struct net_bridge *br, struct net_device *dev)void br_net_exit (struct net *net) {struct net_device *dev; +LIST_HEAD (list);rtnl_lock (); -restart: -for_each_netdev (net, dev) { -if (dev->priv_flags &IFF_EBRIDGE ) { -del_br (netdev_priv (dev)); - goto restart; - } - } +for_each_netdev (net, dev) +if (dev->priv_flags &IFF_EBRIDGE ) +del_br (netdev_priv (dev), &list); + +unregister_netdevice_many (&list);rtnl_unlock (); }
From: Eric Dumazet <[email protected]>
Date: Wed, 28 Oct 2009 16:35:35 +0100
Quoted 3 lines
Speedup module unloading by factorizing
synchronize_rcu()callsSigned-off-by Eric Dumazet <[email protected]>
Applied.