Skip to content

Commit 07a1bc5

Browse files
bvanasscheaxboe
authored andcommitted
block: Fix an error path in disk_update_zone_resources()
Any queue_limits_start_update() call must be followed either by a queue_limits_commit_update() call or by a queue_limits_cancel_update() call. Make sure that the error path near the start of disk_update_zone_resources() follows this requirement. Remove the "goto unfreeze" statement from that error path to make the code easier to verify. This was detected by annotating the queue_limits_*() calls with Clang thread-safety attributes and by building the kernel with thread-safety checking enabled. Without this patch and with thread-safety checking enabled, the following error is reported: block/blk-zoned.c:2020:1: error: mutex 'disk->queue->limits_lock' is not held on every path through here [-Werror,-Wthread-safety-analysis] 2020 | } | ^ block/blk-zoned.c:1959:8: note: mutex acquired here 1959 | lim = queue_limits_start_update(q); | ^ Cc: Damien Le Moal <dlemoal@kernel.org> Cc: Christoph Hellwig <hch@lst.de> Fixes: bba4322 ("block: freeze queue when updating zone resources") Signed-off-by: Bart Van Assche <bvanassche@acm.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Link: https://lore.kernel.org/r/20260114192803.4171847-3-bvanassche@acm.org Signed-off-by: Jens Axboe <axboe@kernel.dk>
1 parent ec19ed2 commit 07a1bc5

1 file changed

Lines changed: 1 addition & 0 deletions

File tree

block/blk-zoned.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1957,6 +1957,7 @@ static int disk_update_zone_resources(struct gendisk *disk,
19571957

19581958
disk->nr_zones = args->nr_zones;
19591959
if (args->nr_conv_zones >= disk->nr_zones) {
1960+
queue_limits_cancel_update(q);
19601961
pr_warn("%s: Invalid number of conventional zones %u / %u\n",
19611962
disk->disk_name, args->nr_conv_zones, disk->nr_zones);
19621963
ret = -ENODEV;

0 commit comments

Comments
 (0)