block: simplify bdev/disk lookup in blkdev_get
authorChristoph Hellwig <hch@lst.de>
Thu, 26 Nov 2020 08:23:26 +0000 (09:23 +0100)
committerJens Axboe <axboe@kernel.dk>
Tue, 1 Dec 2020 21:53:39 +0000 (14:53 -0700)
commit22ae8ce8b89241c94ac00c237752c0ffa37ba5ae
treeaf6d4dfd72e76789c25c64cd1765f037d91f6b72
parent4e7b5671c6a883d94b5428e1a9c141bbd56cb2a6
block: simplify bdev/disk lookup in blkdev_get

To simplify block device lookup and a few other upcoming areas, make sure
that we always have a struct block_device available for each disk and
each partition, and only find existing block devices in bdget.  The only
downside of this is that each device and partition uses a little more
memory.  The upside will be that a lot of code can be simplified.

With that all we need to look up the block device is to lookup the inode
and do a few sanity checks on the gendisk, instead of the separate lookup
for the gendisk.  For blk-cgroup which wants to access a gendisk without
opening it, a new blkdev_{get,put}_no_open low-level interface is added
to replace the previous get_gendisk use.

Note that the change to look up block device directly instead of the two
step lookup using struct gendisk causes a subtile change in behavior:
accessing a non-existing partition on an existing block device can now
cause a call to request_module.  That call is harmless, and in practice
no recent system will access these nodes as they aren't created by udev
and static /dev/ setups are unusual.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-cgroup.c
block/blk-iocost.c
block/blk.h
block/genhd.c
block/partitions/core.c
fs/block_dev.c
include/linux/blk-cgroup.h
include/linux/blkdev.h
include/linux/genhd.h