Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 18b37535 authored by Eric W. Biederman's avatar Eric W. Biederman Committed by David S. Miller
Browse files

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: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ad8d4752
Loading
Loading
Loading
Loading
+16 −22
Original line number Diff line number Diff line
@@ -179,15 +179,24 @@ 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;
	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();
}