diff options
author | Wei Yongjun <yongjun_wei@trendmicro.com.cn> | 2013-08-18 04:09:30 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-08-20 18:05:04 -0400 |
commit | 0aa857f83fe2674f973ad89ec7c0202f5c5d9554 (patch) | |
tree | 5c50ebf98f61473320dbdc086f0f421904472e2d /drivers/net | |
parent | 2bc9ff01f1f93da6c36b34dbc7ce7c42f717693e (diff) |
moxa: fix missing unlock on error in moxart_mac_start_xmit()
Add the missing unlock before return from function moxart_mac_start_xmit()
in the error handling case.
Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/ethernet/moxa/moxart_ether.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/net/ethernet/moxa/moxart_ether.c b/drivers/net/ethernet/moxa/moxart_ether.c index abd2c545df83..6eee6863c224 100644 --- a/drivers/net/ethernet/moxa/moxart_ether.c +++ b/drivers/net/ethernet/moxa/moxart_ether.c | |||
@@ -314,6 +314,7 @@ static int moxart_mac_start_xmit(struct sk_buff *skb, struct net_device *ndev) | |||
314 | unsigned int len; | 314 | unsigned int len; |
315 | unsigned int tx_head = priv->tx_head; | 315 | unsigned int tx_head = priv->tx_head; |
316 | u32 txdes1; | 316 | u32 txdes1; |
317 | int ret = NETDEV_TX_BUSY; | ||
317 | 318 | ||
318 | desc = priv->tx_desc_base + (TX_REG_DESC_SIZE * tx_head); | 319 | desc = priv->tx_desc_base + (TX_REG_DESC_SIZE * tx_head); |
319 | 320 | ||
@@ -321,7 +322,7 @@ static int moxart_mac_start_xmit(struct sk_buff *skb, struct net_device *ndev) | |||
321 | if (readl(desc + TX_REG_OFFSET_DESC0) & TX_DESC0_DMA_OWN) { | 322 | if (readl(desc + TX_REG_OFFSET_DESC0) & TX_DESC0_DMA_OWN) { |
322 | net_dbg_ratelimited("no TX space for packet\n"); | 323 | net_dbg_ratelimited("no TX space for packet\n"); |
323 | priv->stats.tx_dropped++; | 324 | priv->stats.tx_dropped++; |
324 | return NETDEV_TX_BUSY; | 325 | goto out_unlock; |
325 | } | 326 | } |
326 | 327 | ||
327 | len = skb->len > TX_BUF_SIZE ? TX_BUF_SIZE : skb->len; | 328 | len = skb->len > TX_BUF_SIZE ? TX_BUF_SIZE : skb->len; |
@@ -330,7 +331,7 @@ static int moxart_mac_start_xmit(struct sk_buff *skb, struct net_device *ndev) | |||
330 | len, DMA_TO_DEVICE); | 331 | len, DMA_TO_DEVICE); |
331 | if (dma_mapping_error(&ndev->dev, priv->tx_mapping[tx_head])) { | 332 | if (dma_mapping_error(&ndev->dev, priv->tx_mapping[tx_head])) { |
332 | netdev_err(ndev, "DMA mapping error\n"); | 333 | netdev_err(ndev, "DMA mapping error\n"); |
333 | return NETDEV_TX_BUSY; | 334 | goto out_unlock; |
334 | } | 335 | } |
335 | 336 | ||
336 | priv->tx_len[tx_head] = len; | 337 | priv->tx_len[tx_head] = len; |
@@ -360,10 +361,11 @@ static int moxart_mac_start_xmit(struct sk_buff *skb, struct net_device *ndev) | |||
360 | priv->tx_head = TX_NEXT(tx_head); | 361 | priv->tx_head = TX_NEXT(tx_head); |
361 | 362 | ||
362 | ndev->trans_start = jiffies; | 363 | ndev->trans_start = jiffies; |
363 | 364 | ret = NETDEV_TX_OK; | |
365 | out_unlock: | ||
364 | spin_unlock_irq(&priv->txlock); | 366 | spin_unlock_irq(&priv->txlock); |
365 | 367 | ||
366 | return NETDEV_TX_OK; | 368 | return ret; |
367 | } | 369 | } |
368 | 370 | ||
369 | static struct net_device_stats *moxart_mac_get_stats(struct net_device *ndev) | 371 | static struct net_device_stats *moxart_mac_get_stats(struct net_device *ndev) |