2018-11-28 03:01:33

by Pan Bian

[permalink] [raw]
Subject: [PATCH] ubi: put MTD device after it is not used

The MTD device reference is dropped via put_mtd_device, however its
field ->index is read and passed to ubi_msg. To fix this, the patch
moves the reference dropping after calling ubi_msg.

Signed-off-by: Pan Bian <[email protected]>
---
drivers/mtd/ubi/build.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
index a4e3454..09170b7 100644
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
@@ -1101,10 +1101,10 @@ int ubi_detach_mtd_dev(int ubi_num, int anyway)
ubi_wl_close(ubi);
ubi_free_internal_volumes(ubi);
vfree(ubi->vtbl);
- put_mtd_device(ubi->mtd);
vfree(ubi->peb_buf);
vfree(ubi->fm_buf);
ubi_msg(ubi, "mtd%d is detached", ubi->mtd->index);
+ put_mtd_device(ubi->mtd);
put_device(&ubi->dev);
return 0;
}
--
2.7.4




2018-11-28 08:06:41

by Boris Brezillon

[permalink] [raw]
Subject: Re: [PATCH] ubi: put MTD device after it is not used

On Wed, 28 Nov 2018 10:57:33 +0800
Pan Bian <[email protected]> wrote:

> The MTD device reference is dropped via put_mtd_device, however its
> field ->index is read and passed to ubi_msg. To fix this, the patch
> moves the reference dropping after calling ubi_msg.
>
> Signed-off-by: Pan Bian <[email protected]>

Reviewed-by: Boris Brezillon <[email protected]>

> ---
> drivers/mtd/ubi/build.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
> index a4e3454..09170b7 100644
> --- a/drivers/mtd/ubi/build.c
> +++ b/drivers/mtd/ubi/build.c
> @@ -1101,10 +1101,10 @@ int ubi_detach_mtd_dev(int ubi_num, int anyway)
> ubi_wl_close(ubi);
> ubi_free_internal_volumes(ubi);
> vfree(ubi->vtbl);
> - put_mtd_device(ubi->mtd);
> vfree(ubi->peb_buf);
> vfree(ubi->fm_buf);
> ubi_msg(ubi, "mtd%d is detached", ubi->mtd->index);
> + put_mtd_device(ubi->mtd);

Maybe we should move some of these to the dev->release() or
class->dev_release() hook.

> put_device(&ubi->dev);
> return 0;
> }