Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'ibmvnic-Fix-bugs-and-memory-leaks'

Thomas Falcon says:

====================
ibmvnic: Fix bugs and memory leaks

This is a small patch series fixing up some bugs and memory leaks
in the ibmvnic driver. The first fix frees up previously allocated
memory that should be freed in case of an error. The second fixes
a reset case that was failing due to TX/RX queue IRQ's being
erroneously disabled without being enabled again. The final patch
fixes incorrect reallocated of statistics buffers during a device
reset, resulting in loss of statistics information and a memory leak.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>

+17 -11
+17 -11
drivers/net/ethernet/ibm/ibmvnic.c
··· 192 192 if (adapter->fw_done_rc) { 193 193 dev_err(dev, "Couldn't map long term buffer,rc = %d\n", 194 194 adapter->fw_done_rc); 195 + dma_free_coherent(dev, ltb->size, ltb->buff, ltb->addr); 195 196 return -1; 196 197 } 197 198 return 0; ··· 1822 1821 if (rc) 1823 1822 return rc; 1824 1823 } 1824 + ibmvnic_disable_irqs(adapter); 1825 1825 } 1826 - 1827 - ibmvnic_disable_irqs(adapter); 1828 1826 adapter->state = VNIC_CLOSED; 1829 1827 1830 1828 if (reset_state == VNIC_CLOSED) ··· 4586 4586 release_crq_queue(adapter); 4587 4587 } 4588 4588 4589 - rc = init_stats_buffers(adapter); 4590 - if (rc) 4591 - return rc; 4592 - 4593 - rc = init_stats_token(adapter); 4594 - if (rc) 4595 - return rc; 4596 - 4597 4589 return rc; 4598 4590 } 4599 4591 ··· 4654 4662 goto ibmvnic_init_fail; 4655 4663 } while (rc == EAGAIN); 4656 4664 4665 + rc = init_stats_buffers(adapter); 4666 + if (rc) 4667 + goto ibmvnic_init_fail; 4668 + 4669 + rc = init_stats_token(adapter); 4670 + if (rc) 4671 + goto ibmvnic_stats_fail; 4672 + 4657 4673 netdev->mtu = adapter->req_mtu - ETH_HLEN; 4658 4674 netdev->min_mtu = adapter->min_mtu - ETH_HLEN; 4659 4675 netdev->max_mtu = adapter->max_mtu - ETH_HLEN; 4660 4676 4661 4677 rc = device_create_file(&dev->dev, &dev_attr_failover); 4662 4678 if (rc) 4663 - goto ibmvnic_init_fail; 4679 + goto ibmvnic_dev_file_err; 4664 4680 4665 4681 netif_carrier_off(netdev); 4666 4682 rc = register_netdev(netdev); ··· 4686 4686 4687 4687 ibmvnic_register_fail: 4688 4688 device_remove_file(&dev->dev, &dev_attr_failover); 4689 + 4690 + ibmvnic_dev_file_err: 4691 + release_stats_token(adapter); 4692 + 4693 + ibmvnic_stats_fail: 4694 + release_stats_buffers(adapter); 4689 4695 4690 4696 ibmvnic_init_fail: 4691 4697 release_sub_crqs(adapter, 1);