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>
This commit is contained in:
		
					parent
					
						
							
								531ad4282e
							
						
					
				
			
			
				commit
				
					
						9dac6232e2
					
				
			
		
					 1 changed files with 4 additions and 2 deletions
				
			
		| 
						 | 
					@ -1616,7 +1616,7 @@ static int enic_open(struct net_device *netdev)
 | 
				
			||||||
		if (vnic_rq_desc_used(&enic->rq[i]) == 0) {
 | 
							if (vnic_rq_desc_used(&enic->rq[i]) == 0) {
 | 
				
			||||||
			netdev_err(netdev, "Unable to alloc receive buffers\n");
 | 
								netdev_err(netdev, "Unable to alloc receive buffers\n");
 | 
				
			||||||
			err = -ENOMEM;
 | 
								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;
 | 
						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);
 | 
						enic_dev_notify_unset(enic);
 | 
				
			||||||
err_out_free_intr:
 | 
					err_out_free_intr:
 | 
				
			||||||
	enic_free_intr(enic);
 | 
						enic_free_intr(enic);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue