[PATCH 05/14] block: refactor bdev_zone_is_seq()
Damien Le Moal <[email protected]> Wed, 5 Aug 2026 11:27:10 +0900
| Newsgroups | org.kernel.vger.linux-block |
|---|---|
| Message-ID | <[email protected]> |
Define the helper function disk_zone_is_seq() and use it to refactor bdev_zone_is_seq(). disk_zone_is_seq() is also used in blk_zone_wplug_handle_write(). Signed-off-by: Damien Le Moal <[email protected]> --- block/blk-zoned.c | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/block/blk-zoned.c b/block/blk-zoned.c index e5afef2bd7f1..60adc9a4c853 100644 --- a/block/blk-zoned.c +++ b/block/blk-zoned.c @@ -261,6 +261,29 @@ static void disk_zone_set_cond(struct gendisk *disk, sector_t sector, rcu_read_unlock(); } +static inline u8 disk_zone_get_state(struct gendisk *disk, sector_t sector) +{ + unsigned int zno = disk_zone_no(disk, sector); + u8 *zones_state, zs; + + rcu_read_lock(); + zones_state = rcu_dereference(disk->zones_state); + if (likely(zones_state && zno < disk->nr_zones)) + zs = zones_state[zno]; + else + zs = 0; + rcu_read_unlock(); + + return zs; +} + +static bool disk_zone_is_seq(struct gendisk *disk, sector_t sector) +{ + u8 zs = disk_zone_get_state(disk, sector); + + return !blk_zstate_is_conv(zs); +} + /** * bdev_zone_is_seq - check if a sector belongs to a sequential write zone * @bdev: block device to check @@ -270,21 +293,10 @@ static void disk_zone_set_cond(struct gendisk *disk, sector_t sector, */ bool bdev_zone_is_seq(struct block_device *bdev, sector_t sector) { - struct gendisk *disk = bdev->bd_disk; - unsigned int zno = disk_zone_no(disk, sector); - bool is_seq = false; - u8 *zones_state; - if (!bdev_is_zoned(bdev)) return false; - rcu_read_lock(); - zones_state = rcu_dereference(disk->zones_state); - if (zones_state && zno < disk->nr_zones) - is_seq = !blk_zstate_is_conv(zones_state[zno]); - rcu_read_unlock(); - - return is_seq; + return disk_zone_is_seq(bdev->bd_disk, sector); } EXPORT_SYMBOL_GPL(bdev_zone_is_seq); @@ -1522,7 +1534,7 @@ static bool blk_zone_wplug_handle_write(struct bio *bio, unsigned int nr_segs) } /* Conventional zones do not need write plugging. */ - if (!bdev_zone_is_seq(bio->bi_bdev, sector)) { + if (!disk_zone_is_seq(disk, sector)) { /* Zone append to conventional zones is not allowed. */ if (bio_op(bio) == REQ_OP_ZONE_APPEND) { bio_io_error(bio); -- 2.55.0