Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 450f872a authored by Artem Bityutskiy's avatar Artem Bityutskiy
Browse files

UBI: get device when opening volume



When a volume is opened, get its kref via get_device() call.
And put the reference when closing the volume. With this, we
may have a bit saner volume delete.

Signed-off-by: default avatarArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
parent c63a491d
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -635,9 +635,12 @@ static int ubi_cdev_ioctl(struct inode *inode, struct file *file,
		}

		err = ubi_remove_volume(desc);
		if (err)
		/*
		 * The volume is deleted, and the 'struct ubi_volume' object
		 * will be freed when 'ubi_close_volume()' will call
		 * 'put_device()'.
		 */
		ubi_close_volume(desc);

		break;
	}

+2 −0
Original line number Diff line number Diff line
@@ -156,6 +156,7 @@ struct ubi_volume_desc *ubi_open_volume(int ubi_num, int vol_id, int mode)
		vol->exclusive = 1;
		break;
	}
	get_device(&vol->dev);
	spin_unlock(&ubi->volumes_lock);

	desc->vol = vol;
@@ -274,6 +275,7 @@ void ubi_close_volume(struct ubi_volume_desc *desc)
	spin_unlock(&vol->ubi->volumes_lock);

	kfree(desc);
	put_device(&vol->dev);
	module_put(THIS_MODULE);
}
EXPORT_SYMBOL_GPL(ubi_close_volume);
+0 −5
Original line number Diff line number Diff line
@@ -435,7 +435,6 @@ int ubi_remove_volume(struct ubi_volume_desc *desc)
	vol->eba_tbl = NULL;
	cdev_del(&vol->cdev);
	volume_sysfs_close(vol);
	kfree(desc);

	spin_lock(&ubi->volumes_lock);
	ubi->rsvd_pebs -= reserved_pebs;
@@ -453,10 +452,6 @@ int ubi_remove_volume(struct ubi_volume_desc *desc)
	spin_unlock(&ubi->volumes_lock);

	paranoid_check_volumes(ubi);
	mutex_unlock(&ubi->volumes_mutex);
	module_put(THIS_MODULE);
	return 0;

out:
	mutex_unlock(&ubi->volumes_mutex);
	return err;