aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmerigo Wang <amwang@redhat.com>2011-02-17 23:43:34 +0000
committerDavid S. Miller <davem@davemloft.net>2011-02-27 20:11:54 -0800
commit5a698af53fb85b92d6462939a2c75ec4c7233bb9 (patch)
tree7f764fb754039f6f019b80eff874a0c2d9ce1b11
parentnetpoll: remove IFF_IN_NETPOLL flag (diff)
downloadlinux-dev-5a698af53fb85b92d6462939a2c75ec4c7233bb9.tar.xz
linux-dev-5a698af53fb85b92d6462939a2c75ec4c7233bb9.zip
bond: service netpoll arp queue on master device
Neil pointed out that we can't send ARP reply on behalf of slaves, we need to move the arp queue to their bond device. Signed-off-by: WANG Cong <amwang@redhat.com> Acked-by: Neil Horman <nhorman@tuxdriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/core/netpoll.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/net/core/netpoll.c b/net/core/netpoll.c
index f68e6949294e..06be2431753e 100644
--- a/net/core/netpoll.c
+++ b/net/core/netpoll.c
@@ -193,6 +193,17 @@ void netpoll_poll_dev(struct net_device *dev)
poll_napi(dev);
+ if (dev->priv_flags & IFF_SLAVE) {
+ if (dev->npinfo) {
+ struct net_device *bond_dev = dev->master;
+ struct sk_buff *skb;
+ while ((skb = skb_dequeue(&dev->npinfo->arp_tx))) {
+ skb->dev = bond_dev;
+ skb_queue_tail(&bond_dev->npinfo->arp_tx, skb);
+ }
+ }
+ }
+
service_arp_queue(dev->npinfo);
zap_completion_queue();