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

Commit e15c3c22 authored by Amerigo Wang's avatar Amerigo Wang Committed by David S. Miller
Browse files

netpoll: check netpoll tx status on the right device



Although this doesn't matter actually, because netpoll_tx_running()
doesn't use the parameter, the code will be more readable.

For team_dev_queue_xmit() we have to move it down to avoid
compile errors.

Cc: David Miller <davem@davemloft.net>
Signed-off-by: default avatarJiri Pirko <jiri@resnulli.us>
Signed-off-by: default avatarCong Wang <amwang@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4e3828c4
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -398,7 +398,7 @@ int bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb,
		     sizeof(qdisc_skb_cb(skb)->slave_dev_queue_mapping));
		     sizeof(qdisc_skb_cb(skb)->slave_dev_queue_mapping));
	skb->queue_mapping = qdisc_skb_cb(skb)->slave_dev_queue_mapping;
	skb->queue_mapping = qdisc_skb_cb(skb)->slave_dev_queue_mapping;


	if (unlikely(netpoll_tx_running(slave_dev)))
	if (unlikely(netpoll_tx_running(bond->dev)))
		bond_netpoll_send_skb(bond_get_slave_by_dev(bond, slave_dev), skb);
		bond_netpoll_send_skb(bond_get_slave_by_dev(bond, slave_dev), skb);
	else
	else
		dev_queue_xmit(skb);
		dev_queue_xmit(skb);
+15 −15
Original line number Original line Diff line number Diff line
@@ -96,21 +96,6 @@ static inline void team_netpoll_send_skb(struct team_port *port,
}
}
#endif
#endif


static inline int team_dev_queue_xmit(struct team *team, struct team_port *port,
				      struct sk_buff *skb)
{
	BUILD_BUG_ON(sizeof(skb->queue_mapping) !=
		     sizeof(qdisc_skb_cb(skb)->slave_dev_queue_mapping));
	skb_set_queue_mapping(skb, qdisc_skb_cb(skb)->slave_dev_queue_mapping);

	skb->dev = port->dev;
	if (unlikely(netpoll_tx_running(port->dev))) {
		team_netpoll_send_skb(port, skb);
		return 0;
	}
	return dev_queue_xmit(skb);
}

struct team_mode_ops {
struct team_mode_ops {
	int (*init)(struct team *team);
	int (*init)(struct team *team);
	void (*exit)(struct team *team);
	void (*exit)(struct team *team);
@@ -200,6 +185,21 @@ struct team {
	long mode_priv[TEAM_MODE_PRIV_LONGS];
	long mode_priv[TEAM_MODE_PRIV_LONGS];
};
};


static inline int team_dev_queue_xmit(struct team *team, struct team_port *port,
				      struct sk_buff *skb)
{
	BUILD_BUG_ON(sizeof(skb->queue_mapping) !=
		     sizeof(qdisc_skb_cb(skb)->slave_dev_queue_mapping));
	skb_set_queue_mapping(skb, qdisc_skb_cb(skb)->slave_dev_queue_mapping);

	skb->dev = port->dev;
	if (unlikely(netpoll_tx_running(team->dev))) {
		team_netpoll_send_skb(port, skb);
		return 0;
	}
	return dev_queue_xmit(skb);
}

static inline struct hlist_head *team_port_index_hash(struct team *team,
static inline struct hlist_head *team_port_index_hash(struct team *team,
						      int port_index)
						      int port_index)
{
{
+1 −1
Original line number Original line Diff line number Diff line
@@ -65,7 +65,7 @@ static void __br_deliver(const struct net_bridge_port *to, struct sk_buff *skb)
{
{
	skb->dev = to->dev;
	skb->dev = to->dev;


	if (unlikely(netpoll_tx_running(to->dev))) {
	if (unlikely(netpoll_tx_running(to->br->dev))) {
		if (packet_length(skb) > skb->dev->mtu && !skb_is_gso(skb))
		if (packet_length(skb) > skb->dev->mtu && !skb_is_gso(skb))
			kfree_skb(skb);
			kfree_skb(skb);
		else {
		else {