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. > +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 ? > +{ > + 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); -- Damien Le Moal Western Digital Research