]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
block: improve blk_zone_wp_offset()
authorDamien Le Moal <dlemoal@kernel.org>
Fri, 7 Nov 2025 06:38:42 +0000 (15:38 +0900)
committerJens Axboe <axboe@kernel.dk>
Fri, 7 Nov 2025 16:28:08 +0000 (09:28 -0700)
blk_zone_wp_offset() is always called with a struct blk_zone obtained
from the device, that is, it will never see the BLK_ZONE_COND_ACTIVE
condition. However, handling this condition makes this function more
solid and will also avoid issues when propagating cached report requests
to underlying stacked devices is implemented. Add BLK_ZONE_COND_ACTIVE
as a new case in blk_zone_wp_offset() switch.

Also while at it, change the handling of the full condition to return
UINT_MAX for the zone write pointer to reflect the fact that the write
pointer of a full zone is invalid.

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 8204214e3b898dafb81f6d0c5c4f1adf8b7cfcd4..7ce7b8ea5a4fe78fae12bf451bc9db68c485ae27 100644 (file)
@@ -800,18 +800,18 @@ static unsigned int blk_zone_wp_offset(struct blk_zone *zone)
        case BLK_ZONE_COND_IMP_OPEN:
        case BLK_ZONE_COND_EXP_OPEN:
        case BLK_ZONE_COND_CLOSED:
+       case BLK_ZONE_COND_ACTIVE:
                return zone->wp - zone->start;
-       case BLK_ZONE_COND_FULL:
-               return zone->len;
        case BLK_ZONE_COND_EMPTY:
                return 0;
+       case BLK_ZONE_COND_FULL:
        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.
+                * Conventional, full, offline and read-only zones do not have
+                * a valid write pointer.
                 */
                return UINT_MAX;
        }