Prev: linux-next: manual merge of the tty tree with the genesis tree
Next: [PATCH 2/2] ipmi: print info for spmi and smbios path like acpi and pci
From: Yinghai Lu on 27 Jul 2010 01:00 need free the temp info struct when we have duplicated ones -v2: seperate printing change to another patch Signed-off-by: Yinghai Lu <yinghai(a)kernel.org> --- drivers/char/ipmi/ipmi_si_intf.c | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) Index: linux-2.6/drivers/char/ipmi/ipmi_si_intf.c =================================================================== --- linux-2.6.orig/drivers/char/ipmi/ipmi_si_intf.c +++ linux-2.6/drivers/char/ipmi/ipmi_si_intf.c @@ -1804,9 +1804,12 @@ static int hotmod_handler(const char *va info->irq_setup = std_irq_setup; info->slave_addr = ipmb; - if (!add_smi(info)) + if (!add_smi(info)) { if (try_smi_init(info)) cleanup_one_si(info); + } else { + kfree(info); + } } else { /* remove */ struct smi_info *e, *tmp_e; @@ -1890,9 +1893,12 @@ static __devinit void hardcode_find_bmc( info->irq_setup = std_irq_setup; info->slave_addr = slave_addrs[i]; - if (!add_smi(info)) + if (!add_smi(info)) { if (try_smi_init(info)) cleanup_one_si(info); + } else { + kfree(info); + } } } @@ -2088,7 +2094,8 @@ static __devinit int try_init_spmi(struc } info->io.addr_data = spmi->addr.address; - add_smi(info); + if (add_smi(info)) + kfree(info); return 0; } @@ -2204,7 +2211,10 @@ static int __devinit ipmi_pnp_probe(stru res, info->io.regsize, info->io.regspacing, info->irq); - return add_smi(info); + if (add_smi(info)) + goto err_free; + + return 0; err_free: kfree(info); @@ -2362,7 +2372,8 @@ static __devinit void try_init_dmi(struc if (info->irq) info->irq_setup = std_irq_setup; - add_smi(info); + if (add_smi(info)) + kfree(info); } static void __devinit dmi_find_bmc(void) @@ -2468,7 +2479,10 @@ static int __devinit ipmi_pci_probe(stru &pdev->resource[0], info->io.regsize, info->io.regspacing, info->irq); - return add_smi(info); + if (add_smi(info)) + kfree(info); + + return 0; } static void __devexit ipmi_pci_remove(struct pci_dev *pdev) @@ -2581,7 +2595,12 @@ static int __devinit ipmi_of_probe(struc dev_set_drvdata(&dev->dev, info); - return add_smi(info); + if (add_smi(info)) { + kfree(info); + return -EBUSY; + } + + return 0; } static int __devexit ipmi_of_remove(struct of_device *dev) @@ -3018,6 +3037,8 @@ static __devinit void default_find_bmc(v info->io.addr_data); } else cleanup_one_si(info); + } else { + kfree(info); } } } -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |