From: Mauro Carvalho Chehab <mchehab@redhat.com> Date: Tue, 23 Nov 2010 17:33:55 -0500 Subject: [edac] i7core_edac: fix error path of i7core_register_mci Message-id: <20101123153355.77d84d3c@pedra> Patchwork-id: 29572 O-Subject: [PATCH RHEL5 17/29] BZ#:651869 i7core_edac: Fix error path of i7core_register_mci Bugzilla: 651869 Changeset: 628c5ddfb08094a5ef9186dc866d09bfcac105c9 Release resources properly. Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com> Signed-off-by: Jarod Wilson <jarod@redhat.com> diff --git a/drivers/edac/i7core_edac.c b/drivers/edac/i7core_edac.c index 012ccf2..33f870c 100644 --- a/drivers/edac/i7core_edac.c +++ b/drivers/edac/i7core_edac.c @@ -1952,12 +1952,7 @@ static int i7core_register_mci(struct i7core_dev *i7core_dev, /* Store pci devices at mci for faster access */ rc = mci_bind_devs(mci, i7core_dev); if (unlikely(rc < 0)) - goto fail; - - if (pvt->is_registered) - mci->mc_driver_sysfs_attributes = i7core_sysfs_rdimm_attrs; - else - mci->mc_driver_sysfs_attributes = i7core_sysfs_udimm_attrs; + goto fail0; /* Get dimm basic config */ get_dimm_config(mci, &csrow); @@ -1975,7 +1970,7 @@ static int i7core_register_mci(struct i7core_dev *i7core_dev, */ rc = -EINVAL; - goto fail; + goto fail0; } /* Default error mask is any memory */ @@ -1994,11 +1989,16 @@ static int i7core_register_mci(struct i7core_dev *i7core_dev, if (unlikely(rc < 0)) { debugf0("MC: " __FILE__ ": %s(): failed edac_mce_register()\n", __func__); + goto fail1; } -fail: - if (rc < 0) - edac_mc_free(mci); + return 0; + +fail1: + edac_mc_del_mc(mci->dev); +fail0: + kfree(mci->ctl_name); + edac_mc_free(mci); return rc; } @@ -2098,7 +2098,6 @@ static void __devexit i7core_remove(struct pci_dev *pdev) /* Disable MCE NMI handler */ edac_mce_unregister(&pvt->edac_mce); - pvt->i7core_pci = NULL; debugf1("%s: free mci struct\n", mci->ctl_name); kfree(mci->ctl_name);