diff options
| -rw-r--r-- | net/core/netpoll.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 8f971990677c..303097874633 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c | |||
| @@ -386,8 +386,14 @@ void netpoll_send_skb_on_dev(struct netpoll *np, struct sk_buff *skb, | |||
| 386 | !vlan_hw_offload_capable(netif_skb_features(skb), | 386 | !vlan_hw_offload_capable(netif_skb_features(skb), |
| 387 | skb->vlan_proto)) { | 387 | skb->vlan_proto)) { |
| 388 | skb = __vlan_put_tag(skb, skb->vlan_proto, vlan_tx_tag_get(skb)); | 388 | skb = __vlan_put_tag(skb, skb->vlan_proto, vlan_tx_tag_get(skb)); |
| 389 | if (unlikely(!skb)) | 389 | if (unlikely(!skb)) { |
| 390 | break; | 390 | /* This is actually a packet drop, but we |
| 391 | * don't want the code at the end of this | ||
| 392 | * function to try and re-queue a NULL skb. | ||
| 393 | */ | ||
| 394 | status = NETDEV_TX_OK; | ||
| 395 | goto unlock_txq; | ||
| 396 | } | ||
| 391 | skb->vlan_tci = 0; | 397 | skb->vlan_tci = 0; |
| 392 | } | 398 | } |
| 393 | 399 | ||
| @@ -395,6 +401,7 @@ void netpoll_send_skb_on_dev(struct netpoll *np, struct sk_buff *skb, | |||
| 395 | if (status == NETDEV_TX_OK) | 401 | if (status == NETDEV_TX_OK) |
| 396 | txq_trans_update(txq); | 402 | txq_trans_update(txq); |
| 397 | } | 403 | } |
| 404 | unlock_txq: | ||
| 398 | __netif_tx_unlock(txq); | 405 | __netif_tx_unlock(txq); |
| 399 | 406 | ||
| 400 | if (status == NETDEV_TX_OK) | 407 | if (status == NETDEV_TX_OK) |
