diff options
| author | Eric W. Biederman <ebiederm@xmission.com> | 2014-03-14 23:50:25 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2014-03-17 15:47:23 -0400 |
| commit | 18b37535f861b7eb053040b0b9502331a781c782 (patch) | |
| tree | 38c924b99d68c77255595140880b61c4542fa866 | |
| parent | ad8d475244b4112a0f5331e78d043d3a4c9eb37e (diff) | |
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>
| -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 0e45835f1737..b69bb3f1ba3f 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) | |||
| 179 | } | 179 | } |
| 180 | } | 180 | } |
| 181 | 181 | ||
| 182 | static void service_neigh_queue(struct netpoll_info *npi) | 182 | static void service_neigh_queue(struct net_device *dev, |
| 183 | struct netpoll_info *npi) | ||
| 183 | { | 184 | { |
| 184 | if (npi) { | 185 | struct sk_buff *skb; |
| 185 | struct sk_buff *skb; | 186 | if (dev->flags & IFF_SLAVE) { |
| 186 | 187 | struct net_device *bond_dev; | |
| 187 | while ((skb = skb_dequeue(&npi->neigh_tx))) | 188 | struct netpoll_info *bond_ni; |
| 188 | netpoll_neigh_reply(skb, npi); | 189 | |
| 190 | bond_dev = netdev_master_upper_dev_get_rcu(dev); | ||
| 191 | bond_ni = rcu_dereference_bh(bond_dev->npinfo); | ||
| 192 | while ((skb = skb_dequeue(&npi->neigh_tx))) { | ||
| 193 | skb->dev = bond_dev; | ||
| 194 | skb_queue_tail(&bond_ni->neigh_tx, skb); | ||
| 195 | } | ||
| 189 | } | 196 | } |
| 197 | while ((skb = skb_dequeue(&npi->neigh_tx))) | ||
| 198 | netpoll_neigh_reply(skb, npi); | ||
| 190 | } | 199 | } |
| 191 | 200 | ||
| 192 | static void netpoll_poll_dev(struct net_device *dev) | 201 | static void netpoll_poll_dev(struct net_device *dev) |
| @@ -227,22 +236,7 @@ static void netpoll_poll_dev(struct net_device *dev) | |||
| 227 | 236 | ||
| 228 | up(&ni->dev_lock); | 237 | up(&ni->dev_lock); |
| 229 | 238 | ||
| 230 | if (dev->flags & IFF_SLAVE) { | 239 | service_neigh_queue(dev, ni); |
| 231 | if (ni) { | ||
| 232 | struct net_device *bond_dev; | ||
| 233 | struct sk_buff *skb; | ||
| 234 | struct netpoll_info *bond_ni; | ||
| 235 | |||
| 236 | bond_dev = netdev_master_upper_dev_get_rcu(dev); | ||
| 237 | bond_ni = rcu_dereference_bh(bond_dev->npinfo); | ||
| 238 | while ((skb = skb_dequeue(&ni->neigh_tx))) { | ||
| 239 | skb->dev = bond_dev; | ||
| 240 | skb_queue_tail(&bond_ni->neigh_tx, skb); | ||
| 241 | } | ||
| 242 | } | ||
| 243 | } | ||
| 244 | |||
| 245 | service_neigh_queue(ni); | ||
| 246 | 240 | ||
| 247 | zap_completion_queue(); | 241 | zap_completion_queue(); |
| 248 | } | 242 | } |
