diff options
author | Dave Peterson <dsp@llnl.gov> | 2006-03-26 01:38:47 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-26 08:57:07 -0800 |
commit | 028a7b6d3d9fa2cc41d76d45575345cca8d00a4c (patch) | |
tree | 42d59be8db8af1cd60e8388c2d93230335b28606 /drivers/edac | |
parent | a1d03fcc1399b1e23922bcc3af1772b128aa6e93 (diff) |
[PATCH] EDAC: edac_mc_add_mc fix [2/2]
This is part 2 of a 2-part patch set.
Fix edac_mc_add_mc() so it cleans up properly if call to
edac_create_sysfs_mci_device() fails.
Signed-off-by: David S. Peterson <dsp@llnl.gov>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/edac')
-rw-r--r-- | drivers/edac/edac_mc.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c index 226d4fdb15f..d37a4c4a312 100644 --- a/drivers/edac/edac_mc.c +++ b/drivers/edac/edac_mc.c @@ -1484,8 +1484,6 @@ EXPORT_SYMBOL(edac_mc_add_mc); /* FIXME - should a warning be printed if no error detection? correction? */ int edac_mc_add_mc(struct mem_ctl_info *mci) { - int rc = 1; - debugf0("%s()\n", __func__); #ifdef CONFIG_EDAC_DEBUG if (edac_debug_level >= 3) @@ -1505,7 +1503,7 @@ int edac_mc_add_mc(struct mem_ctl_info *mci) down(&mem_ctls_mutex); if (add_mc_to_global_list(mci)) - goto finish; + goto fail0; /* set load time so that error rate can be tracked */ mci->start_time = jiffies; @@ -1513,19 +1511,22 @@ int edac_mc_add_mc(struct mem_ctl_info *mci) if (edac_create_sysfs_mci_device(mci)) { edac_mc_printk(mci, KERN_WARNING, "failed to create sysfs device\n"); - /* FIXME - should there be an error code and unwind? */ - goto finish; + goto fail1; } /* Report action taken */ edac_mc_printk(mci, KERN_INFO, "Giving out device to %s %s: PCI %s\n", mci->mod_name, mci->ctl_name, pci_name(mci->pdev)); - rc = 0; + up(&mem_ctls_mutex); + return 0; -finish: +fail1: + del_mc_from_global_list(mci); + +fail0: up(&mem_ctls_mutex); - return rc; + return 1; } |