lkml.org 
[lkml]   [2019]   [May]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH 02/21] EDAC: Fixes to use put_device() after device_add() errors
Date
Always use put_device() after device_add() failed.

Signed-off-by: Robert Richter <rrichter@marvell.com>
---
drivers/edac/edac_mc_sysfs.c | 36 +++++++++++++++++++-----------------
1 file changed, 19 insertions(+), 17 deletions(-)

diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c
index 464174685589..dbef699162a8 100644
--- a/drivers/edac/edac_mc_sysfs.c
+++ b/drivers/edac/edac_mc_sysfs.c
@@ -404,6 +404,8 @@ static inline int nr_pages_per_csrow(struct csrow_info *csrow)
static int edac_create_csrow_object(struct mem_ctl_info *mci,
struct csrow_info *csrow, int index)
{
+ int err;
+
csrow->dev.type = &csrow_attr_type;
csrow->dev.groups = csrow_dev_groups;
device_initialize(&csrow->dev);
@@ -415,7 +417,11 @@ static int edac_create_csrow_object(struct mem_ctl_info *mci,
edac_dbg(0, "creating (virtual) csrow node %s\n",
dev_name(&csrow->dev));

- return device_add(&csrow->dev);
+ err = device_add(&csrow->dev);
+ if (err)
+ put_device(&csrow->dev);
+
+ return err;
}

/* Create a CSROW object under specifed edac_mc_device */
@@ -646,8 +652,11 @@ static int edac_create_dimm_object(struct mem_ctl_info *mci,
pm_runtime_forbid(&mci->dev);

err = device_add(&dimm->dev);
-
- edac_dbg(0, "creating rank/dimm device %s\n", dev_name(&dimm->dev));
+ if (err)
+ put_device(&dimm->dev);
+ else
+ edac_dbg(0, "creating rank/dimm device %s\n",
+ dev_name(&dimm->dev));

return err;
}
@@ -927,8 +936,9 @@ int edac_create_sysfs_mci_device(struct mem_ctl_info *mci,
edac_dbg(0, "creating device %s\n", dev_name(&mci->dev));
err = device_add(&mci->dev);
if (err < 0) {
+ put_device(&mci->dev);
edac_dbg(1, "failure: create device %s\n", dev_name(&mci->dev));
- goto out;
+ return err;
}

/*
@@ -977,7 +987,6 @@ int edac_create_sysfs_mci_device(struct mem_ctl_info *mci,
}
device_unregister(&mci->dev);

-out:
return err;
}

@@ -1034,10 +1043,8 @@ int __init edac_mc_sysfs_init(void)
int err;

mci_pdev = kzalloc(sizeof(*mci_pdev), GFP_KERNEL);
- if (!mci_pdev) {
- err = -ENOMEM;
- goto out;
- }
+ if (!mci_pdev)
+ return -ENOMEM;

mci_pdev->bus = edac_get_sysfs_subsys();
mci_pdev->type = &mc_attr_type;
@@ -1046,15 +1053,10 @@ int __init edac_mc_sysfs_init(void)

err = device_add(mci_pdev);
if (err < 0)
- goto out_put_device;
-
- edac_dbg(0, "device %s created\n", dev_name(mci_pdev));
-
- return 0;
+ put_device(mci_pdev);
+ else
+ edac_dbg(0, "device %s created\n", dev_name(mci_pdev));

- out_put_device:
- put_device(mci_pdev);
- out:
return err;
}

--
2.20.1
\
 
 \ /
  Last update: 2019-05-29 10:46    [W:0.680 / U:0.020 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site