netpoll: Consolidate neigh_tx processing in service_neigh_queue
[linux-2.6-block.git] / net / core / netpoll.c
index 0e45835f17376f83c7938e1a3cd5d054e39b411b..b69bb3f1ba3f94670e488c5501632245de3fbb63 100644 (file)
@@ -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();
 }