From 2f0ab9379909dbc765b0e250669f8f57254c8463 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Thibaut=20VAR=C3=88NE?= Date: Tue, 11 May 2021 12:50:21 +0200 Subject: [PATCH] generic: platform/mikrotik: release mtd device after use MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Tested-by: Koen Vandeputte Signed-off-by: Thibaut VARÈNE (cherry picked from commit 4e385a27d6c4aab62ef7fc9856f09ebee9632985) --- .../files/drivers/platform/mikrotik/rb_hardconfig.c | 5 ++++- .../files/drivers/platform/mikrotik/rb_softconfig.c | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.c b/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.c index 41dea98b5e..e6a6928896 100644 --- a/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.c +++ b/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.c @@ -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; diff --git a/target/linux/generic/files/drivers/platform/mikrotik/rb_softconfig.c b/target/linux/generic/files/drivers/platform/mikrotik/rb_softconfig.c index 54e263df8c..070bd32d5a 100644 --- a/target/linux/generic/files/drivers/platform/mikrotik/rb_softconfig.c +++ b/target/linux/generic/files/drivers/platform/mikrotik/rb_softconfig.c @@ -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; -- 2.30.2