i7core_edac: Fix error path of i7core_register_mci
authorHidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Fri, 20 Aug 2010 07:28:40 +0000 (04:28 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sun, 24 Oct 2010 13:20:40 +0000 (11:20 -0200)
Release resources properly.

Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/edac/i7core_edac.c

index 6bebf4d..3542e8c 100644 (file)
@@ -1954,7 +1954,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;
+               goto fail0;
 
        if (pvt->is_registered)
                mci->mc_driver_sysfs_attributes = i7core_sysfs_rdimm_attrs;
@@ -1977,7 +1977,7 @@ static int i7core_register_mci(struct i7core_dev *i7core_dev,
                 */
 
                rc = -EINVAL;
-               goto fail;
+               goto fail0;
        }
 
        /* Default error mask is any memory */
@@ -1998,11 +1998,17 @@ 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:
+       i7core_pci_ctl_release(pvt);
+       edac_mc_del_mc(mci->dev);
+fail0:
+       kfree(mci->ctl_name);
+       edac_mc_free(mci);
        return rc;
 }