|
|
@@ -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.bus = mci->bus;
|
|
|
csrow->dev.groups = csrow_dev_groups;
|
|
|
@@ -416,7 +418,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 */
|