bonding: don't call slave_xxx_netpoll under spinlocks
Subsystems (3)
PATCH v2 1/4 bonding: don't call slave_xxx_netpoll under spinlocks
The slave_xxx_netpoll will call synchronize_rcu_bh(), so the function may schedule and sleep, it should't be called under spinlocks.
bond_netpoll_setup() and bond_netpoll_cleanup() are always protected by rtnl lock, it is no need to take the read lock, as the slave list couldn't be changed outside rtnl lock.
--- drivers/net/bonding/bond_main.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-)
drivers/net/bonding/bond_main.c +3 -12
@@ -1249,8 +1249,9 @@ static void bond_poll_controller(struct net_device *bond_dev) { } -static void __bond_netpoll_cleanup (struct bonding *bond) +static void bond_netpoll_cleanup (struct net_device *bond_dev) { +struct bonding *bond =netdev_priv (bond_dev);struct slave *slave;int i;
@@ -1258,14 +1259,6 @@ static void __bond_netpoll_cleanup(struct bonding *bond)if (IS_UP (slave->dev))slave_disable_netpoll (slave); } -static void bond_netpoll_cleanup (struct net_device *bond_dev) -{ -struct bonding *bond =netdev_priv (bond_dev); - -read_lock (&bond->lock); -__bond_netpoll_cleanup (bond); -read_unlock (&bond->lock); -}static int bond_netpoll_setup (struct net_device *dev,struct netpoll_info *ni,gfp_t gfp) {
@@ -1273,15 +1266,13 @@ static int bond_netpoll_setup(struct net_device *dev, struct netpoll_info *ni, gstruct slave *slave;int i, err =0 ; -read_lock (&bond->lock);bond_for_each_slave (bond, slave, i) { err =slave_enable_netpoll (slave);if (err) { -__bond_netpoll_cleanup (bond); +bond_netpoll_cleanup (dev);break ; } } -read_unlock (&bond->lock);return err; }
Signature · 1 line
1.8.0
From: Ding Tianhong <[email protected]>
Date: Tue, 23 Jul 2013 15:25:27 +0800
Quoted 9 lines
The
slave_xxx_netpollwill callsynchronize_rcu_bh(), so the function may schedule and sleep, it should't be called under spinlocks.
bond_netpoll_setup()andbond_netpoll_cleanup()are always protected by rtnl lock, it is no need to take the read lock, as the slave list couldn't be changed outside rtnl lock.Signed-off-by Ding Tianhong <[email protected]>
Applied.