[PATCH] ubi: don't decrease ubi->ref_count on detach error
Ryder W
rydercoding at hotmail.com
Tue Dec 5 00:11:10 PST 2023
> > Fixes: cdfa788acd13 ("UBI: prepare attach and detach functions")
> > Signed-off-by: Daniel Golle <daniel at makrotopia.org>
> > ---
> > drivers/mtd/ubi/build.c | 6 +++---
> > 1 file changed, 3 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
> > index 7d4ff1193db6f..f47987ee9a31b 100644
> > --- a/drivers/mtd/ubi/build.c
> > +++ b/drivers/mtd/ubi/build.c
> > @@ -1099,16 +1099,16 @@ int ubi_detach_mtd_dev(int ubi_num, int anyway)
> >
> > spin_lock(&ubi_devices_lock);
> > put_device(&ubi->dev);
> > - ubi->ref_count -= 1;
> > - if (ubi->ref_count) {
> > + if (ubi->ref_count > 1) {
> > if (!anyway) {
> > spin_unlock(&ubi_devices_lock);
> > return -EBUSY;
> > }
> > /* This may only happen if there is a bug */
> > ubi_err(ubi, "%s reference count %d, destroy anyway",
> > - ubi->ubi_name, ubi->ref_count);
> > + ubi->ubi_name, ubi->ref_count - 1);
> > }
> > + ubi->ref_count -= 1;
> > ubi_devices[ubi_num] = NULL;
> > spin_unlock(&ubi_devices_lock);
In the last code of ubi_detach_mtd_dev, the line "ubi->ref_count -= 1" after the line "put_device(&ubi->dev)" is just to decrease ubi->ref_count, which is increased from calling put_device. I don't understand why it should be moved after the sanity check of ubi->ref_count. It may introduce some more critical bug.
More information about the linux-mtd
mailing list