[PATCH 43/44] block: merge struct block_device and struct hd_struct
Jan Kara
jack at suse.cz
Fri Nov 27 08:19:01 EST 2020
On Thu 26-11-20 14:04:21, Christoph Hellwig wrote:
> Instead of having two structures that represent each block device with
> different life time rules, merge them into a single one. This also
> greatly simplifies the reference counting rules, as we can use the inode
> reference count as the main reference count for the new struct
> block_device, with the device model reference front ending it for device
> model interaction. The percpu refcount in struct hd_struct is entirely
> gone given that struct block_device must be opened and thus valid for
> the duration of the I/O.
The percpu refcount is long gone after the series refactoring...
> @@ -939,13 +910,13 @@ void blk_request_module(dev_t devt)
> */
> struct block_device *bdget_disk(struct gendisk *disk, int partno)
> {
> - struct hd_struct *part;
> struct block_device *bdev = NULL;
>
> - part = disk_get_part(disk, partno);
> - if (part)
> - bdev = bdget_part(part);
> - disk_put_part(part);
> + rcu_read_lock();
> + bdev = __disk_get_part(disk, partno);
> + if (bdev)
> + bdgrab(bdev);
Again I think you need to accommodate for bdgrab() returning NULL here when
we race with partition destruction...
> + rcu_read_unlock();
>
> return bdev;
> }
Honza
--
Jan Kara <jack at suse.com>
SUSE Labs, CR
More information about the linux-mtd
mailing list