summaryrefslogtreecommitdiff
path: root/drivers/net
diff options
context:
space:
mode:
authorGovindarajulu Varadarajan <_govind@gmx.com>2015-01-02 18:23:27 +0300
committerDavid S. Miller <davem@davemloft.net>2015-01-03 00:43:45 +0300
commit9dac6232e2ee2bc85dc71f464f19f047afc9422c (patch)
treef458ef03df6f48f83a3231f024b46fc8522f4c2a /drivers/net
parent531ad4282e5105db984f1706e1a21799157655a3 (diff)
downloadlinux-9dac6232e2ee2bc85dc71f464f19f047afc9422c.tar.xz
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>
Diffstat (limited to 'drivers/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)
if (vnic_rq_desc_used(&enic->rq[i]) == 0) {
netdev_err(netdev, "Unable to alloc receive buffers\n");
err = -ENOMEM;
- goto err_out_notify_unset;
+ goto err_out_free_rq;
}
}
@@ -1649,7 +1649,9 @@ static int enic_open(struct net_device *netdev)
return 0;
-err_out_notify_unset:
+err_out_free_rq:
+ for (i = 0; i < enic->rq_count; i++)
+ vnic_rq_clean(&enic->rq[i], enic_free_rq_buf);
enic_dev_notify_unset(enic);
err_out_free_intr:
enic_free_intr(enic);