|
@@ -449,11 +449,9 @@ int bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb,
|
|
if (unlikely(bond->dev->priv_flags & IFF_IN_NETPOLL)) {
|
|
if (unlikely(bond->dev->priv_flags & IFF_IN_NETPOLL)) {
|
|
struct netpoll *np = bond->dev->npinfo->netpoll;
|
|
struct netpoll *np = bond->dev->npinfo->netpoll;
|
|
slave_dev->npinfo = bond->dev->npinfo;
|
|
slave_dev->npinfo = bond->dev->npinfo;
|
|
- np->real_dev = np->dev = skb->dev;
|
|
|
|
slave_dev->priv_flags |= IFF_IN_NETPOLL;
|
|
slave_dev->priv_flags |= IFF_IN_NETPOLL;
|
|
- netpoll_send_skb(np, skb);
|
|
|
|
|
|
+ netpoll_send_skb_on_dev(np, skb, slave_dev);
|
|
slave_dev->priv_flags &= ~IFF_IN_NETPOLL;
|
|
slave_dev->priv_flags &= ~IFF_IN_NETPOLL;
|
|
- np->dev = bond->dev;
|
|
|
|
} else
|
|
} else
|
|
#endif
|
|
#endif
|
|
dev_queue_xmit(skb);
|
|
dev_queue_xmit(skb);
|
|
@@ -1332,9 +1330,14 @@ static bool slaves_support_netpoll(struct net_device *bond_dev)
|
|
|
|
|
|
static void bond_poll_controller(struct net_device *bond_dev)
|
|
static void bond_poll_controller(struct net_device *bond_dev)
|
|
{
|
|
{
|
|
- struct net_device *dev = bond_dev->npinfo->netpoll->real_dev;
|
|
|
|
- if (dev != bond_dev)
|
|
|
|
- netpoll_poll_dev(dev);
|
|
|
|
|
|
+ struct bonding *bond = netdev_priv(bond_dev);
|
|
|
|
+ struct slave *slave;
|
|
|
|
+ int i;
|
|
|
|
+
|
|
|
|
+ bond_for_each_slave(bond, slave, i) {
|
|
|
|
+ if (slave->dev && IS_UP(slave->dev))
|
|
|
|
+ netpoll_poll_dev(slave->dev);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
static void bond_netpoll_cleanup(struct net_device *bond_dev)
|
|
static void bond_netpoll_cleanup(struct net_device *bond_dev)
|