Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 27922b4260f65d317aabda37e42bbbff > files > 786

kernel-2.6.18-238.el5.src.rpm

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);