[PATCH 1/2] block: introduce zone capacity helper

Naohiro Aota
2025-03-12T01:32:21Z

{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@wdc.com>
---
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
+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)
+{
+ 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);
--
2.48.1