diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2014-03-14 20:50:25 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-03-17 15:47:23 -0400 |
commit | 18b37535f861b7eb053040b0b9502331a781c782 (patch) | |
tree | 38c924b99d68c77255595140880b61c4542fa866 /net/core | |
parent | ad8d475244b4112a0f5331e78d043d3a4c9eb37e (diff) | |
download | op-kernel-dev-18b37535f861b7eb053040b0b9502331a781c782.zip op-kernel-dev-18b37535f861b7eb053040b0b9502331a781c782.tar.gz |
netpoll: Consolidate neigh_tx processing in service_neigh_queue
Move the bond slave device neigh_tx handling into service_neigh_queue.
In connection with neigh_tx processing remove unnecessary tests of
a NULL netpoll_info. As the netpoll_poll_dev has already used
and thus verified the existince of the netpoll_info.
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/netpoll.c | 38 |
1 files changed, 16 insertions, 22 deletions
diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 0e45835..b69bb3f 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -179,14 +179,23 @@ static void poll_napi(struct net_device *dev, int budget) } } -static void service_neigh_queue(struct netpoll_info *npi) +static void service_neigh_queue(struct net_device *dev, + struct netpoll_info *npi) { - if (npi) { - struct sk_buff *skb; - - while ((skb = skb_dequeue(&npi->neigh_tx))) - netpoll_neigh_reply(skb, npi); + struct sk_buff *skb; + if (dev->flags & IFF_SLAVE) { + struct net_device *bond_dev; + struct netpoll_info *bond_ni; + + bond_dev = netdev_master_upper_dev_get_rcu(dev); + bond_ni = rcu_dereference_bh(bond_dev->npinfo); + while ((skb = skb_dequeue(&npi->neigh_tx))) { + skb->dev = bond_dev; + skb_queue_tail(&bond_ni->neigh_tx, skb); + } } + while ((skb = skb_dequeue(&npi->neigh_tx))) + netpoll_neigh_reply(skb, npi); } static void netpoll_poll_dev(struct net_device *dev) @@ -227,22 +236,7 @@ static void netpoll_poll_dev(struct net_device *dev) up(&ni->dev_lock); - if (dev->flags & IFF_SLAVE) { - if (ni) { - struct net_device *bond_dev; - struct sk_buff *skb; - struct netpoll_info *bond_ni; - - bond_dev = netdev_master_upper_dev_get_rcu(dev); - bond_ni = rcu_dereference_bh(bond_dev->npinfo); - while ((skb = skb_dequeue(&ni->neigh_tx))) { - skb->dev = bond_dev; - skb_queue_tail(&bond_ni->neigh_tx, skb); - } - } - } - - service_neigh_queue(ni); + service_neigh_queue(dev, ni); zap_completion_queue(); } |