diff options
Diffstat (limited to 'drivers/net/bonding/bond_main.c')
| -rw-r--r-- | drivers/net/bonding/bond_main.c | 12 | 
1 files changed, 5 insertions, 7 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 6fae5f3ec7f..d688a8af432 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -398,7 +398,7 @@ int bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb,  		     sizeof(qdisc_skb_cb(skb)->slave_dev_queue_mapping));  	skb->queue_mapping = qdisc_skb_cb(skb)->slave_dev_queue_mapping; -	if (unlikely(netpoll_tx_running(slave_dev))) +	if (unlikely(netpoll_tx_running(bond->dev)))  		bond_netpoll_send_skb(bond_get_slave_by_dev(bond, slave_dev), skb);  	else  		dev_queue_xmit(skb); @@ -1235,12 +1235,12 @@ static inline int slave_enable_netpoll(struct slave *slave)  	struct netpoll *np;  	int err = 0; -	np = kzalloc(sizeof(*np), GFP_KERNEL); +	np = kzalloc(sizeof(*np), GFP_ATOMIC);  	err = -ENOMEM;  	if (!np)  		goto out; -	err = __netpoll_setup(np, slave->dev); +	err = __netpoll_setup(np, slave->dev, GFP_ATOMIC);  	if (err) {  		kfree(np);  		goto out; @@ -1257,9 +1257,7 @@ static inline void slave_disable_netpoll(struct slave *slave)  		return;  	slave->np = NULL; -	synchronize_rcu_bh(); -	__netpoll_cleanup(np); -	kfree(np); +	__netpoll_free_rcu(np);  }  static inline bool slave_dev_support_netpoll(struct net_device *slave_dev)  { @@ -1292,7 +1290,7 @@ static void bond_netpoll_cleanup(struct net_device *bond_dev)  	read_unlock(&bond->lock);  } -static int bond_netpoll_setup(struct net_device *dev, struct netpoll_info *ni) +static int bond_netpoll_setup(struct net_device *dev, struct netpoll_info *ni, gfp_t gfp)  {  	struct bonding *bond = netdev_priv(dev);  	struct slave *slave;  |