generic: platform/mikrotik: release mtd device after use
authorThibaut VARÈNE <hacks@slashdirt.org>
Tue, 11 May 2021 10:50:21 +0000 (12:50 +0200)
committerKoen Vandeputte <koen.vandeputte@ncentric.com>
Wed, 12 May 2021 08:14:33 +0000 (10:14 +0200)
The code uses get_mtd_device_nm() which must be followed by a call to
put_mtd_device() once the handle is no longer used.

This fixes spurious shutdown console messages such as:
[ 2256.334562] Removing MTD device #7 (soft_config) with use count 1

Reported-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
Tested-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
(cherry picked from commit 4e385a27d6c4aab62ef7fc9856f09ebee9632985)

target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.c
target/linux/generic/files/drivers/platform/mikrotik/rb_softconfig.c

index 41dea98b5e6df023d49d8a54129d5eb5f8e7496a..e6a6928896bb0ed0a7413b403720553bc5c7685c 100644 (file)
@@ -697,10 +697,13 @@ int __init rb_hardconfig_init(struct kobject *rb_kobj)
 
        hc_buflen = mtd->size;
        hc_buf = kmalloc(hc_buflen, GFP_KERNEL);
-       if (!hc_buf)
+       if (!hc_buf) {
+               put_mtd_device(mtd);
                return -ENOMEM;
+       }
 
        ret = mtd_read(mtd, 0, hc_buflen, &bytes_read, hc_buf);
+       put_mtd_device(mtd);
 
        if (ret)
                goto fail;
index 54e263df8c0ee1bc3783b490fb795af3e8992e7a..070bd32d5ab43ccc1e20774df8d64e4cef07b24b 100644 (file)
@@ -686,6 +686,8 @@ static ssize_t sc_commit_store(struct kobject *kobj, struct kobj_attribute *attr
        }
        write_unlock(&sc_bufrwl);
 
+       put_mtd_device(mtd);
+
        if (ret)
                goto mtdfail;
 
@@ -721,10 +723,13 @@ int __init rb_softconfig_init(struct kobject *rb_kobj)
 
        sc_buflen = mtd->size;
        sc_buf = kmalloc(sc_buflen, GFP_KERNEL);
-       if (!sc_buf)
+       if (!sc_buf) {
+               put_mtd_device(mtd);
                return -ENOMEM;
+       }
 
        ret = mtd_read(mtd, 0, sc_buflen, &bytes_read, sc_buf);
+       put_mtd_device(mtd);
 
        if (ret)
                goto fail;