Commit 9b38bb4b authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe

block: simplify blkdev_nr_zones

Simplify the arguments to blkdev_nr_zones by passing a gendisk instead
of the block_device and capacity.  This also removes the need for
__blkdev_nr_zones as all callers are outside the fast path and can
deal with the additional branch.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent bb556282
...@@ -70,30 +70,20 @@ void __blk_req_zone_write_unlock(struct request *rq) ...@@ -70,30 +70,20 @@ void __blk_req_zone_write_unlock(struct request *rq)
} }
EXPORT_SYMBOL_GPL(__blk_req_zone_write_unlock); EXPORT_SYMBOL_GPL(__blk_req_zone_write_unlock);
static inline unsigned int __blkdev_nr_zones(struct request_queue *q,
sector_t nr_sectors)
{
sector_t zone_sectors = blk_queue_zone_sectors(q);
return (nr_sectors + zone_sectors - 1) >> ilog2(zone_sectors);
}
/** /**
* blkdev_nr_zones - Get number of zones * blkdev_nr_zones - Get number of zones
* @bdev: Target block device * @disk: Target gendisk
* *
* Description: * Return the total number of zones of a zoned block device. For a block
* Return the total number of zones of a zoned block device. * device without zone capabilities, the number of zones is always 0.
* For a regular block device, the number of zones is always 0.
*/ */
unsigned int blkdev_nr_zones(struct block_device *bdev) unsigned int blkdev_nr_zones(struct gendisk *disk)
{ {
struct request_queue *q = bdev_get_queue(bdev); sector_t zone_sectors = blk_queue_zone_sectors(disk->queue);
if (!blk_queue_is_zoned(q)) if (!blk_queue_is_zoned(disk->queue))
return 0; return 0;
return (get_capacity(disk) + zone_sectors - 1) >> ilog2(zone_sectors);
return __blkdev_nr_zones(q, get_capacity(bdev->bd_disk));
} }
EXPORT_SYMBOL_GPL(blkdev_nr_zones); EXPORT_SYMBOL_GPL(blkdev_nr_zones);
...@@ -447,7 +437,7 @@ static int blk_update_zone_info(struct gendisk *disk, unsigned int nr_zones, ...@@ -447,7 +437,7 @@ static int blk_update_zone_info(struct gendisk *disk, unsigned int nr_zones,
int blk_revalidate_disk_zones(struct gendisk *disk) int blk_revalidate_disk_zones(struct gendisk *disk)
{ {
struct request_queue *q = disk->queue; struct request_queue *q = disk->queue;
unsigned int nr_zones = __blkdev_nr_zones(q, get_capacity(disk)); unsigned int nr_zones = blkdev_nr_zones(disk);
struct blk_revalidate_zone_args args = { .disk = disk }; struct blk_revalidate_zone_args args = { .disk = disk };
int ret = 0; int ret = 0;
......
...@@ -512,7 +512,7 @@ int blkdev_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd, ...@@ -512,7 +512,7 @@ int blkdev_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
case BLKGETZONESZ: case BLKGETZONESZ:
return put_uint(arg, bdev_zone_sectors(bdev)); return put_uint(arg, bdev_zone_sectors(bdev));
case BLKGETNRZONES: case BLKGETNRZONES:
return put_uint(arg, blkdev_nr_zones(bdev)); return put_uint(arg, blkdev_nr_zones(bdev->bd_disk));
case HDIO_GETGEO: case HDIO_GETGEO:
return blkdev_getgeo(bdev, argp); return blkdev_getgeo(bdev, argp);
case BLKRAGET: case BLKRAGET:
......
...@@ -727,7 +727,7 @@ static int dmz_get_zoned_device(struct dm_target *ti, char *path) ...@@ -727,7 +727,7 @@ static int dmz_get_zoned_device(struct dm_target *ti, char *path)
dev->zone_nr_blocks = dmz_sect2blk(dev->zone_nr_sectors); dev->zone_nr_blocks = dmz_sect2blk(dev->zone_nr_sectors);
dev->zone_nr_blocks_shift = ilog2(dev->zone_nr_blocks); dev->zone_nr_blocks_shift = ilog2(dev->zone_nr_blocks);
dev->nr_zones = blkdev_nr_zones(dev->bdev); dev->nr_zones = blkdev_nr_zones(dev->bdev->bd_disk);
dmz->dev = dev; dmz->dev = dev;
......
...@@ -357,8 +357,7 @@ typedef int (*report_zones_cb)(struct blk_zone *zone, unsigned int idx, ...@@ -357,8 +357,7 @@ typedef int (*report_zones_cb)(struct blk_zone *zone, unsigned int idx,
#define BLK_ALL_ZONES ((unsigned int)-1) #define BLK_ALL_ZONES ((unsigned int)-1)
int blkdev_report_zones(struct block_device *bdev, sector_t sector, int blkdev_report_zones(struct block_device *bdev, sector_t sector,
unsigned int nr_zones, report_zones_cb cb, void *data); unsigned int nr_zones, report_zones_cb cb, void *data);
unsigned int blkdev_nr_zones(struct gendisk *disk);
extern unsigned int blkdev_nr_zones(struct block_device *bdev);
extern int blkdev_zone_mgmt(struct block_device *bdev, enum req_opf op, extern int blkdev_zone_mgmt(struct block_device *bdev, enum req_opf op,
sector_t sectors, sector_t nr_sectors, sector_t sectors, sector_t nr_sectors,
gfp_t gfp_mask); gfp_t gfp_mask);
...@@ -371,7 +370,7 @@ extern int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode, ...@@ -371,7 +370,7 @@ extern int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode,
#else /* CONFIG_BLK_DEV_ZONED */ #else /* CONFIG_BLK_DEV_ZONED */
static inline unsigned int blkdev_nr_zones(struct block_device *bdev) static inline unsigned int blkdev_nr_zones(struct gendisk *disk)
{ {
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment