diff options
author | Byungho An <bh74.an@samsung.com> | 2015-01-14 20:43:11 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-01-15 19:01:10 -0500 |
commit | f7d855566ff69207be1052ceecbf455f89490b42 (patch) | |
tree | d0de74bbec41497ba26105ad701dd4e4fd2bc492 | |
parent | 1c1832c7cd35db90b126a984685b44858ad63d01 (diff) |
net: sxgbe: Fix waring for double kfree()
This patch fixes double kfree() calls at init_rx_ring() because
it causes static checker warning.
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Byungho An <bh74.an@samsung.com>
Signed-off-by: Kukjin Kim <kgene@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c b/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c index 698494481d18..b1a271853d85 100644 --- a/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c +++ b/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c | |||
@@ -474,13 +474,19 @@ static int init_rx_ring(struct net_device *dev, u8 queue_no, | |||
474 | /* allocate memory for RX skbuff array */ | 474 | /* allocate memory for RX skbuff array */ |
475 | rx_ring->rx_skbuff_dma = kmalloc_array(rx_rsize, | 475 | rx_ring->rx_skbuff_dma = kmalloc_array(rx_rsize, |
476 | sizeof(dma_addr_t), GFP_KERNEL); | 476 | sizeof(dma_addr_t), GFP_KERNEL); |
477 | if (rx_ring->rx_skbuff_dma == NULL) | 477 | if (!rx_ring->rx_skbuff_dma) { |
478 | goto dmamem_err; | 478 | dma_free_coherent(priv->device, |
479 | rx_rsize * sizeof(struct sxgbe_rx_norm_desc), | ||
480 | rx_ring->dma_rx, rx_ring->dma_rx_phy); | ||
481 | goto error; | ||
482 | } | ||
479 | 483 | ||
480 | rx_ring->rx_skbuff = kmalloc_array(rx_rsize, | 484 | rx_ring->rx_skbuff = kmalloc_array(rx_rsize, |
481 | sizeof(struct sk_buff *), GFP_KERNEL); | 485 | sizeof(struct sk_buff *), GFP_KERNEL); |
482 | if (rx_ring->rx_skbuff == NULL) | 486 | if (!rx_ring->rx_skbuff) { |
483 | goto rxbuff_err; | 487 | kfree(rx_ring->rx_skbuff_dma); |
488 | goto error; | ||
489 | } | ||
484 | 490 | ||
485 | /* initialise the buffers */ | 491 | /* initialise the buffers */ |
486 | for (desc_index = 0; desc_index < rx_rsize; desc_index++) { | 492 | for (desc_index = 0; desc_index < rx_rsize; desc_index++) { |
@@ -502,13 +508,6 @@ static int init_rx_ring(struct net_device *dev, u8 queue_no, | |||
502 | err_init_rx_buffers: | 508 | err_init_rx_buffers: |
503 | while (--desc_index >= 0) | 509 | while (--desc_index >= 0) |
504 | free_rx_ring(priv->device, rx_ring, desc_index); | 510 | free_rx_ring(priv->device, rx_ring, desc_index); |
505 | kfree(rx_ring->rx_skbuff); | ||
506 | rxbuff_err: | ||
507 | kfree(rx_ring->rx_skbuff_dma); | ||
508 | dmamem_err: | ||
509 | dma_free_coherent(priv->device, | ||
510 | rx_rsize * sizeof(struct sxgbe_rx_norm_desc), | ||
511 | rx_ring->dma_rx, rx_ring->dma_rx_phy); | ||
512 | error: | 511 | error: |
513 | return -ENOMEM; | 512 | return -ENOMEM; |
514 | } | 513 | } |