On Wed Mar 12, 2025 at 10:39 AM JST, Damien Le Moal wrote: > On 3/12/25 10:31, Naohiro Aota wrote: >> {bdev,disk}_zone_capacity() takes block_device or gendisk and sector position >> and returns the zone capacity of the corresponding zone. >> >> Signed-off-by: Naohiro Aota <naohiro.aota@xxxxxxx> >> --- >> include/linux/blkdev.h | 21 +++++++++++++++++++++ >> 1 file changed, 21 insertions(+) >> >> diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h >> index d37751789bf5..3c860a0cf339 100644 >> --- a/include/linux/blkdev.h >> +++ b/include/linux/blkdev.h >> @@ -826,6 +826,27 @@ static inline u64 sb_bdev_nr_blocks(struct super_block *sb) >> (sb->s_blocksize_bits - SECTOR_SHIFT); >> } >> >> +#ifdef CONFIG_BLK_DEV_ZONED > > There is already an "#ifdef CONFIG_BLK_DEV_ZONED" in blkdev.h, see > disk_nr_zones(). Please add this new helper under that ifdef to avoid adding a > new one. Sure. But, since this patch uses get_capacity(), we need to move the existing ones here instead. > >> +static inline unsigned int disk_zone_capacity(struct gendisk *disk, sector_t pos) >> +{ >> + sector_t zone_sectors = disk->queue->limits.chunk_sectors; >> + >> + if (pos + zone_sectors >= get_capacity(disk)) >> + return disk->last_zone_capacity; >> + return disk->zone_capacity; >> +} >> +#else /* CONFIG_BLK_DEV_ZONED */ >> +static inline unsigned int disk_zone_capacity(struct gendisk *disk, sector_t pos) > > Is this ever called for a non zoned drive ? It should not be... So do we really > need this stub ? I added that just let it compile without CONFIG_BLK_DEV_ZONED. Well, the code querying the capacity should be under CONFIG_BLK_DEV_ZONED, so maybe it is not necessary. I'll drop that. > >> +{ >> + return 0; >> +} >> +#endif /* CONFIG_BLK_DEV_ZONED */ >> + >> +static inline unsigned int bdev_zone_capacity(struct block_device *bdev, sector_t pos) >> +{ >> + return disk_zone_capacity(bdev->bd_disk, pos); >> +} >> + >> int bdev_disk_changed(struct gendisk *disk, bool invalidate); >> >> void put_disk(struct gendisk *disk);