aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGovindarajulu Varadarajan <_govind@gmx.com>2015-01-02 10:23:27 -0500
committerDavid S. Miller <davem@davemloft.net>2015-01-02 16:43:45 -0500
commit9dac6232e2ee2bc85dc71f464f19f047afc9422c (patch)
treef458ef03df6f48f83a3231f024b46fc8522f4c2a
parent531ad4282e5105db984f1706e1a21799157655a3 (diff)
enic: free all rq buffs when allocation fails
When allocation of all RQs fail, we do not free previously allocated buffers, before returning error. This causes memory leak. This patch fixes this by calling vnic_rq_clean(), which frees all the rq buffers. Signed-off-by: Govindarajulu Varadarajan <_govind@gmx.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/cisco/enic/enic_main.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c
index 705f334ebb85..b29e027c476e 100644
--- a/drivers/net/ethernet/cisco/enic/enic_main.c
+++ b/drivers/net/ethernet/cisco/enic/enic_main.c
@@ -1616,7 +1616,7 @@ static int enic_open(struct net_device *netdev)
1616 if (vnic_rq_desc_used(&enic->rq[i]) == 0) { 1616 if (vnic_rq_desc_used(&enic->rq[i]) == 0) {
1617 netdev_err(netdev, "Unable to alloc receive buffers\n"); 1617 netdev_err(netdev, "Unable to alloc receive buffers\n");
1618 err = -ENOMEM; 1618 err = -ENOMEM;
1619 goto err_out_notify_unset; 1619 goto err_out_free_rq;
1620 } 1620 }
1621 } 1621 }
1622 1622
@@ -1649,7 +1649,9 @@ static int enic_open(struct net_device *netdev)
1649 1649
1650 return 0; 1650 return 0;
1651 1651
1652err_out_notify_unset: 1652err_out_free_rq:
1653 for (i = 0; i < enic->rq_count; i++)
1654 vnic_rq_clean(&enic->rq[i], enic_free_rq_buf);
1653 enic_dev_notify_unset(enic); 1655 enic_dev_notify_unset(enic);
1654err_out_free_intr: 1656err_out_free_intr:
1655 enic_free_intr(enic); 1657 enic_free_intr(enic);