diff options
Diffstat (limited to 'drivers/net/usb/ipheth.c')
| -rw-r--r-- | drivers/net/usb/ipheth.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/net/usb/ipheth.c b/drivers/net/usb/ipheth.c index c247aed2dceb..8c01fbf68a89 100644 --- a/drivers/net/usb/ipheth.c +++ b/drivers/net/usb/ipheth.c | |||
| @@ -383,17 +383,18 @@ static int ipheth_tx(struct sk_buff *skb, struct net_device *net) | |||
| 383 | dev); | 383 | dev); |
| 384 | dev->tx_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; | 384 | dev->tx_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; |
| 385 | 385 | ||
| 386 | netif_stop_queue(net); | ||
| 386 | retval = usb_submit_urb(dev->tx_urb, GFP_ATOMIC); | 387 | retval = usb_submit_urb(dev->tx_urb, GFP_ATOMIC); |
| 387 | if (retval) { | 388 | if (retval) { |
| 388 | dev_err(&dev->intf->dev, "%s: usb_submit_urb: %d\n", | 389 | dev_err(&dev->intf->dev, "%s: usb_submit_urb: %d\n", |
| 389 | __func__, retval); | 390 | __func__, retval); |
| 390 | dev->net->stats.tx_errors++; | 391 | dev->net->stats.tx_errors++; |
| 391 | dev_kfree_skb_any(skb); | 392 | dev_kfree_skb_any(skb); |
| 393 | netif_wake_queue(net); | ||
| 392 | } else { | 394 | } else { |
| 393 | dev->net->stats.tx_packets++; | 395 | dev->net->stats.tx_packets++; |
| 394 | dev->net->stats.tx_bytes += skb->len; | 396 | dev->net->stats.tx_bytes += skb->len; |
| 395 | dev_consume_skb_any(skb); | 397 | dev_consume_skb_any(skb); |
| 396 | netif_stop_queue(net); | ||
| 397 | } | 398 | } |
| 398 | 399 | ||
| 399 | return NETDEV_TX_OK; | 400 | return NETDEV_TX_OK; |
