From: Damien Le Moal <dlemoal@kernel.org>
To: Jens Axboe <axboe@kernel.dk>, linux-block@vger.kernel.org
Cc: Christoph Hellwig <hch@lst.de>
Subject: [PATCH v2 05/13] block: refactor bdev_zone_is_seq()
Date: Fri, 7 Aug 2026 01:04:37 +0900 [thread overview]
Message-ID: <20260806160445.848337-6-dlemoal@kernel.org> (raw)
In-Reply-To: <20260806160445.848337-1-dlemoal@kernel.org>
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 <dlemoal@kernel.org>
---
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 50b98c394b50..c1090155d961 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
next prev parent reply other threads:[~2026-08-06 16:05 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-06 16:04 [PATCH v2 00/13] Improve handling of offline and read-only zones Damien Le Moal
2026-08-06 16:04 ` [PATCH v2 01/13] block: remove disk_free_zone_resources() Damien Le Moal
2026-08-10 14:46 ` Christoph Hellwig
2026-08-06 16:04 ` [PATCH v2 02/13] block: refactor disk_revalidate_zone_resources() Damien Le Moal
2026-08-10 14:47 ` Christoph Hellwig
2026-08-06 16:04 ` [PATCH v2 03/13] block: refactor disk_update_zone_resources() Damien Le Moal
2026-08-07 9:03 ` Hannes Reinecke
2026-08-10 14:48 ` Christoph Hellwig
2026-08-06 16:04 ` [PATCH v2 04/13] block: remember a zone type regardless of its condition Damien Le Moal
2026-08-07 9:11 ` Hannes Reinecke
2026-08-10 14:52 ` Christoph Hellwig
2026-08-06 16:04 ` Damien Le Moal [this message]
2026-08-07 9:12 ` [PATCH v2 05/13] block: refactor bdev_zone_is_seq() Hannes Reinecke
2026-08-06 16:04 ` [PATCH v2 06/13] block: introduce disk_for_all_zone_wplugs() Damien Le Moal
2026-08-07 10:20 ` Hannes Reinecke
2026-08-06 16:04 ` [PATCH v2 07/13] block: drop all zone write plugs on capacity changes Damien Le Moal
2026-08-07 10:24 ` Hannes Reinecke
2026-08-06 16:04 ` [PATCH v2 08/13] block: propagate readonly and offline conditions to zone write plugs Damien Le Moal
2026-08-07 10:32 ` Hannes Reinecke
2026-08-06 16:04 ` [PATCH v2 09/13] block: always treat offline and read-only zones as dead Damien Le Moal
2026-08-07 10:46 ` Hannes Reinecke
2026-08-07 15:48 ` Damien Le Moal
2026-08-06 16:04 ` [PATCH v2 10/13] block: fail zone management operations to read-only and offline zones Damien Le Moal
2026-08-07 11:42 ` Hannes Reinecke
2026-08-06 16:04 ` [PATCH v2 11/13] block: allow read-only and offline conventional zones Damien Le Moal
2026-08-07 11:48 ` Hannes Reinecke
2026-08-06 16:04 ` [PATCH v2 12/13] block: simplify disk_zone_set_cond() Damien Le Moal
2026-08-07 11:51 ` Hannes Reinecke
2026-08-06 16:04 ` [PATCH v2 13/13] block: flag zoned disks with GENHD_FL_NO_PART Damien Le Moal
2026-08-07 11:53 ` Hannes Reinecke
2026-08-07 15:34 ` [PATCH v2 00/13] Improve handling of offline and read-only zones Bart Van Assche
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260806160445.848337-6-dlemoal@kernel.org \
--to=dlemoal@kernel.org \
--cc=axboe@kernel.dk \
--cc=hch@lst.de \
--cc=linux-block@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox