EDAC/sysfs: Drop device references properly [Linux 5.3]

This Linux kernel change "EDAC/sysfs: Drop device references properly" is included in the Linux 5.3 release. This change is authored by Greg KH <gregkh [at] linuxfoundation.org> on Wed May 8 12:40:42 2019 +0200. The commit for this change in Linux stable tree is 7adc05d (patch).

EDAC/sysfs: Drop device references properly

Do put_device() if device_add() fails.

 [ bp: do device_del() for the successfully created devices in
   edac_create_csrow_objects(), on the unwind path. ]

Signed-off-by: Greg KH <gregkh@linuxfoundation.org>
Signed-off-by: Borislav Petkov <bp@suse.de>
Link: https://lkml.kernel.org/r/20190427214925.GE16338@kroah.com

There are 10 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 drivers/edac/edac_mc_sysfs.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c
index 9b7d396..7c01e1c 100644
--- a/drivers/edac/edac_mc_sysfs.c
+++ b/drivers/edac/edac_mc_sysfs.c
@@ -449,7 +449,8 @@ static int edac_create_csrow_objects(struct mem_ctl_info *mci)
        csrow = mci->csrows[i];
        if (!nr_pages_per_csrow(csrow))
            continue;
-       put_device(&mci->csrows[i]->dev);
+
+       device_del(&mci->csrows[i]->dev);
    }

    return err;
@@ -651,9 +652,11 @@ static int edac_create_dimm_object(struct mem_ctl_info *mci,
    dev_set_drvdata(&dimm->dev, dimm);
    pm_runtime_forbid(&mci->dev);

-   err =  device_add(&dimm->dev);
+   err = device_add(&dimm->dev);
+   if (err)
+       put_device(&dimm->dev);

-   edac_dbg(0, "creating rank/dimm device %s\n", dev_name(&dimm->dev));
+   edac_dbg(0, "created rank/dimm device %s\n", dev_name(&dimm->dev));

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

Leave a Reply

Your email address will not be published. Required fields are marked *