mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-04 01:49:36 +00:00
wan: lmc: Switch to using managed resources
Use managed resource functions devm_kzalloc and pcim_enable_device to simplify error handling. Subsequently, remove unnecessary kfree, pci_disable_device and pci_release_regions. To be compatible with the change, various gotos are replaced with direct returns and unneeded labels are dropped. Also, `sc` was only being freed in the probe function and not the remove function before the change. By using devm_kzalloc this patch also fixes this memory leak. Signed-off-by: Amitoj Kaur Chawla <amitoj1606@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7da5ee09f1
commit
7cb43bebab
1 changed files with 7 additions and 20 deletions
|
@ -826,7 +826,7 @@ static int lmc_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
|
||||
/* lmc_trace(dev, "lmc_init_one in"); */
|
||||
|
||||
err = pci_enable_device(pdev);
|
||||
err = pcim_enable_device(pdev);
|
||||
if (err) {
|
||||
printk(KERN_ERR "lmc: pci enable failed: %d\n", err);
|
||||
return err;
|
||||
|
@ -835,23 +835,20 @@ static int lmc_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
err = pci_request_regions(pdev, "lmc");
|
||||
if (err) {
|
||||
printk(KERN_ERR "lmc: pci_request_region failed\n");
|
||||
goto err_req_io;
|
||||
return err;
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocate our own device structure
|
||||
*/
|
||||
sc = kzalloc(sizeof(lmc_softc_t), GFP_KERNEL);
|
||||
if (!sc) {
|
||||
err = -ENOMEM;
|
||||
goto err_kzalloc;
|
||||
}
|
||||
sc = devm_kzalloc(&pdev->dev, sizeof(lmc_softc_t), GFP_KERNEL);
|
||||
if (!sc)
|
||||
return -ENOMEM;
|
||||
|
||||
dev = alloc_hdlcdev(sc);
|
||||
if (!dev) {
|
||||
printk(KERN_ERR "lmc:alloc_netdev for device failed\n");
|
||||
err = -ENOMEM;
|
||||
goto err_hdlcdev;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
||||
|
@ -888,7 +885,7 @@ static int lmc_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
if (err) {
|
||||
printk(KERN_ERR "%s: register_netdev failed.\n", dev->name);
|
||||
free_netdev(dev);
|
||||
goto err_hdlcdev;
|
||||
return err;
|
||||
}
|
||||
|
||||
sc->lmc_cardtype = LMC_CARDTYPE_UNKNOWN;
|
||||
|
@ -971,14 +968,6 @@ static int lmc_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
|
||||
lmc_trace(dev, "lmc_init_one out");
|
||||
return 0;
|
||||
|
||||
err_hdlcdev:
|
||||
kfree(sc);
|
||||
err_kzalloc:
|
||||
pci_release_regions(pdev);
|
||||
err_req_io:
|
||||
pci_disable_device(pdev);
|
||||
return err;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -992,8 +981,6 @@ static void lmc_remove_one(struct pci_dev *pdev)
|
|||
printk(KERN_DEBUG "%s: removing...\n", dev->name);
|
||||
unregister_hdlc_device(dev);
|
||||
free_netdev(dev);
|
||||
pci_release_regions(pdev);
|
||||
pci_disable_device(pdev);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue