Skip to content

Commit 6eacf8a

Browse files
Amerigo Wangdavem330
authored andcommitted
vlan: clean up vlan_dev_hard_start_xmit()
Clean up vlan_dev_hard_start_xmit() function. Cc: Benjamin LaHaise <[email protected]> Cc: Patrick McHardy <[email protected]> Cc: David Miller <[email protected]> Signed-off-by: Cong Wang <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent f3da389 commit 6eacf8a

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

net/8021q/vlan_dev.c

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,21 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev,
137137
return rc;
138138
}
139139

140+
static inline netdev_tx_t vlan_netpoll_send_skb(struct vlan_dev_priv *vlan, struct sk_buff *skb)
141+
{
142+
#ifdef CONFIG_NET_POLL_CONTROLLER
143+
if (vlan->netpoll)
144+
netpoll_send_skb(vlan->netpoll, skb);
145+
#else
146+
BUG();
147+
#endif
148+
return NETDEV_TX_OK;
149+
}
150+
140151
static netdev_tx_t vlan_dev_hard_start_xmit(struct sk_buff *skb,
141152
struct net_device *dev)
142153
{
154+
struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
143155
struct vlan_ethhdr *veth = (struct vlan_ethhdr *)(skb->data);
144156
unsigned int len;
145157
int ret;
@@ -150,29 +162,30 @@ static netdev_tx_t vlan_dev_hard_start_xmit(struct sk_buff *skb,
150162
* OTHER THINGS LIKE FDDI/TokenRing/802.3 SNAPs...
151163
*/
152164
if (veth->h_vlan_proto != htons(ETH_P_8021Q) ||
153-
vlan_dev_priv(dev)->flags & VLAN_FLAG_REORDER_HDR) {
165+
vlan->flags & VLAN_FLAG_REORDER_HDR) {
154166
u16 vlan_tci;
155-
vlan_tci = vlan_dev_priv(dev)->vlan_id;
167+
vlan_tci = vlan->vlan_id;
156168
vlan_tci |= vlan_dev_get_egress_qos_mask(dev, skb);
157169
skb = __vlan_hwaccel_put_tag(skb, vlan_tci);
158170
}
159171

160-
skb->dev = vlan_dev_priv(dev)->real_dev;
172+
skb->dev = vlan->real_dev;
161173
len = skb->len;
162-
if (netpoll_tx_running(dev))
163-
return skb->dev->netdev_ops->ndo_start_xmit(skb, skb->dev);
174+
if (unlikely(netpoll_tx_running(dev)))
175+
return vlan_netpoll_send_skb(vlan, skb);
176+
164177
ret = dev_queue_xmit(skb);
165178

166179
if (likely(ret == NET_XMIT_SUCCESS || ret == NET_XMIT_CN)) {
167180
struct vlan_pcpu_stats *stats;
168181

169-
stats = this_cpu_ptr(vlan_dev_priv(dev)->vlan_pcpu_stats);
182+
stats = this_cpu_ptr(vlan->vlan_pcpu_stats);
170183
u64_stats_update_begin(&stats->syncp);
171184
stats->tx_packets++;
172185
stats->tx_bytes += len;
173186
u64_stats_update_end(&stats->syncp);
174187
} else {
175-
this_cpu_inc(vlan_dev_priv(dev)->vlan_pcpu_stats->tx_dropped);
188+
this_cpu_inc(vlan->vlan_pcpu_stats->tx_dropped);
176189
}
177190

178191
return ret;

0 commit comments

Comments
 (0)