]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
block: refactor disk_zone_wplug_sync_wp_offset()
authorDamien Le Moal <dlemoal@kernel.org>
Fri, 7 Nov 2025 06:38:43 +0000 (15:38 +0900)
committerJens Axboe <axboe@kernel.dk>
Fri, 7 Nov 2025 16:28:08 +0000 (09:28 -0700)
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 value of obtained
with blk_zone_wp_offset() to avoid this double call, which simplifies a
little blk_revalidate_seq_zone().

Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-zoned.c

index 7ce7b8ea5a4fe78fae12bf451bc9db68c485ae27..b580d59ce2104494b12064c555db57451f881a75 100644 (file)
@@ -817,23 +817,24 @@ static unsigned int blk_zone_wp_offset(struct blk_zone *zone)
        }
 }
 
-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 = blk_zone_wp_offset(zone);
 
        zwplug = disk_get_zone_wplug(disk, zone->start);
-       if (!zwplug)
-               return;
+       if (zwplug) {
+               unsigned long flags;
 
-       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));
-       spin_unlock_irqrestore(&zwplug->lock, flags);
+               spin_lock_irqsave(&zwplug->lock, flags);
+               if (zwplug->flags & BLK_ZONE_WPLUG_NEED_WP_UPDATE)
+                       disk_zone_wplug_set_wp_offset(disk, zwplug, wp_offset);
+               spin_unlock_irqrestore(&zwplug->lock, flags);
+               disk_put_zone_wplug(zwplug);
+       }
 
-       disk_put_zone_wplug(zwplug);
+       return wp_offset;
 }
 
 /**
@@ -2101,9 +2102,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;