diff options
author | Dave Peterson <dsp@llnl.gov> | 2006-03-26 04:38:47 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-26 11:57:07 -0500 |
commit | 028a7b6d3d9fa2cc41d76d45575345cca8d00a4c (patch) | |
tree | 42d59be8db8af1cd60e8388c2d93230335b28606 | |
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>
-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 226d4fdb15fd..d37a4c4a3125 100644 --- a/drivers/edac/edac_mc.c +++ b/drivers/edac/edac_mc.c | |||
@@ -1484,8 +1484,6 @@ EXPORT_SYMBOL(edac_mc_add_mc); | |||
1484 | /* FIXME - should a warning be printed if no error detection? correction? */ | 1484 | /* FIXME - should a warning be printed if no error detection? correction? */ |
1485 | int edac_mc_add_mc(struct mem_ctl_info *mci) | 1485 | int edac_mc_add_mc(struct mem_ctl_info *mci) |
1486 | { | 1486 | { |
1487 | int rc = 1; | ||
1488 | |||
1489 | debugf0("%s()\n", __func__); | 1487 | debugf0("%s()\n", __func__); |
1490 | #ifdef CONFIG_EDAC_DEBUG | 1488 | #ifdef CONFIG_EDAC_DEBUG |
1491 | if (edac_debug_level >= 3) | 1489 | if (edac_debug_level >= 3) |
@@ -1505,7 +1503,7 @@ int edac_mc_add_mc(struct mem_ctl_info *mci) | |||
1505 | down(&mem_ctls_mutex); | 1503 | down(&mem_ctls_mutex); |
1506 | 1504 | ||
1507 | if (add_mc_to_global_list(mci)) | 1505 | if (add_mc_to_global_list(mci)) |
1508 | goto finish; | 1506 | goto fail0; |
1509 | 1507 | ||
1510 | /* set load time so that error rate can be tracked */ | 1508 | /* set load time so that error rate can be tracked */ |
1511 | mci->start_time = jiffies; | 1509 | mci->start_time = jiffies; |
@@ -1513,19 +1511,22 @@ int edac_mc_add_mc(struct mem_ctl_info *mci) | |||
1513 | if (edac_create_sysfs_mci_device(mci)) { | 1511 | if (edac_create_sysfs_mci_device(mci)) { |
1514 | edac_mc_printk(mci, KERN_WARNING, | 1512 | edac_mc_printk(mci, KERN_WARNING, |
1515 | "failed to create sysfs device\n"); | 1513 | "failed to create sysfs device\n"); |
1516 | /* FIXME - should there be an error code and unwind? */ | 1514 | goto fail1; |
1517 | goto finish; | ||
1518 | } | 1515 | } |
1519 | 1516 | ||
1520 | /* Report action taken */ | 1517 | /* Report action taken */ |
1521 | edac_mc_printk(mci, KERN_INFO, "Giving out device to %s %s: PCI %s\n", | 1518 | edac_mc_printk(mci, KERN_INFO, "Giving out device to %s %s: PCI %s\n", |
1522 | mci->mod_name, mci->ctl_name, pci_name(mci->pdev)); | 1519 | mci->mod_name, mci->ctl_name, pci_name(mci->pdev)); |
1523 | 1520 | ||
1524 | rc = 0; | 1521 | up(&mem_ctls_mutex); |
1522 | return 0; | ||
1525 | 1523 | ||
1526 | finish: | 1524 | fail1: |
1525 | del_mc_from_global_list(mci); | ||
1526 | |||
1527 | fail0: | ||
1527 | up(&mem_ctls_mutex); | 1528 | up(&mem_ctls_mutex); |
1528 | return rc; | 1529 | return 1; |
1529 | } | 1530 | } |
1530 | 1531 | ||
1531 | 1532 | ||