All of lore.kernel.org
 help / color / mirror / Atom feed
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 1/2] block: remove blk_zone_wp_offset()
Date: Thu,  6 Nov 2025 16:06:26 +0900	[thread overview]
Message-ID: <20251106070627.96995-2-dlemoal@kernel.org> (raw)
In-Reply-To: <20251106070627.96995-1-dlemoal@kernel.org>

The helper function blk_zone_wp_offset() is called from
disk_zone_wplug_sync_wp_offset(), and again called from
blk_revalidate_seq_zone() right after the call to
disk_zone_wplug_sync_wp_offset().

Change disk_zone_wplug_sync_wp_offset() to return the wp_offset it used
for updating the target zone write plug to avoid this double call. With
this change, blk_zone_wp_offset() can be open coded directly in
disk_zone_wplug_sync_wp_offset(). This open-coding introduces 2 changes:
handle the BLK_COND_ZONE_ACTIVE case, and return UINT_MAX as the
wp_offset for a full zone, since the write pointer of full zones is
invalid.

For the case where a zone does not have a zone write plug,
disk_zone_wplug_sync_wp_offset() does nothing and returns 0. This in
turn leads to blk_revalidate_seq_zone() to immediately return, which is
exactly what we want (because there is no need to attempt removing a
zone write plug that does not exist).

Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
---
 block/blk-zoned.c | 64 +++++++++++++++++++++++------------------------
 1 file changed, 32 insertions(+), 32 deletions(-)

diff --git a/block/blk-zoned.c b/block/blk-zoned.c
index c5226bcaaa94..2f4e45638601 100644
--- a/block/blk-zoned.c
+++ b/block/blk-zoned.c
@@ -794,46 +794,48 @@ static void disk_zone_wplug_set_wp_offset(struct gendisk *disk,
 		disk_remove_zone_wplug(disk, zwplug);
 }
 
-static unsigned int blk_zone_wp_offset(struct blk_zone *zone)
-{
-	switch (zone->cond) {
-	case BLK_ZONE_COND_IMP_OPEN:
-	case BLK_ZONE_COND_EXP_OPEN:
-	case BLK_ZONE_COND_CLOSED:
-		return zone->wp - zone->start;
-	case BLK_ZONE_COND_FULL:
-		return zone->len;
-	case BLK_ZONE_COND_EMPTY:
-		return 0;
-	case BLK_ZONE_COND_NOT_WP:
-	case BLK_ZONE_COND_OFFLINE:
-	case BLK_ZONE_COND_READONLY:
-	default:
-		/*
-		 * Conventional, offline and read-only zones do not have a valid
-		 * write pointer.
-		 */
-		return UINT_MAX;
-	}
-}
-
-static void disk_zone_wplug_sync_wp_offset(struct gendisk *disk,
-					   struct blk_zone *zone)
+static unsigned int disk_zone_wplug_sync_wp_offset(struct gendisk *disk,
+						   struct blk_zone *zone)
 {
 	struct blk_zone_wplug *zwplug;
 	unsigned long flags;
+	unsigned int wp_offset;
 
 	zwplug = disk_get_zone_wplug(disk, zone->start);
 	if (!zwplug)
-		return;
+		return 0;
 
 	spin_lock_irqsave(&zwplug->lock, flags);
-	if (zwplug->flags & BLK_ZONE_WPLUG_NEED_WP_UPDATE)
-		disk_zone_wplug_set_wp_offset(disk, zwplug,
-					      blk_zone_wp_offset(zone));
+	if (zwplug->flags & BLK_ZONE_WPLUG_NEED_WP_UPDATE) {
+		switch (zone->cond) {
+		case BLK_ZONE_COND_IMP_OPEN:
+		case BLK_ZONE_COND_EXP_OPEN:
+		case BLK_ZONE_COND_CLOSED:
+		case BLK_ZONE_COND_ACTIVE:
+			wp_offset = zone->wp - zone->start;
+			break;
+		case BLK_ZONE_COND_EMPTY:
+			wp_offset = 0;
+			break;
+		case BLK_ZONE_COND_FULL:
+		case BLK_ZONE_COND_NOT_WP:
+		case BLK_ZONE_COND_OFFLINE:
+		case BLK_ZONE_COND_READONLY:
+		default:
+			/*
+			 * Conventional, full, offline and read-only zones do
+			 * not have a valid write pointer.
+			 */
+			wp_offset = UINT_MAX;
+			break;
+		}
+		disk_zone_wplug_set_wp_offset(disk, zwplug, wp_offset);
+	}
 	spin_unlock_irqrestore(&zwplug->lock, flags);
 
 	disk_put_zone_wplug(zwplug);
+
+	return wp_offset;
 }
 
 /**
@@ -2095,9 +2097,7 @@ static int blk_revalidate_seq_zone(struct blk_zone *zone, unsigned int idx,
 	if (!queue_emulates_zone_append(disk->queue) || !disk->zone_wplugs_hash)
 		return 0;
 
-	disk_zone_wplug_sync_wp_offset(disk, zone);
-
-	wp_offset = blk_zone_wp_offset(zone);
+	wp_offset = disk_zone_wplug_sync_wp_offset(disk, zone);
 	if (!wp_offset || wp_offset >= zone->capacity)
 		return 0;
 
-- 
2.51.1


  reply	other threads:[~2025-11-06  7:10 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-06  7:06 [PATCH 0/2] Zone related cleanups Damien Le Moal
2025-11-06  7:06 ` Damien Le Moal [this message]
2025-11-06 11:03   ` [PATCH 1/2] block: remove blk_zone_wp_offset() Christoph Hellwig
2025-11-06  7:06 ` [PATCH 2/2] block: introduce bdev_zone_start() Damien Le Moal
2025-11-06 11:03   ` Christoph Hellwig
2025-11-06 16:02   ` 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=20251106070627.96995-2-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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.