summaryrefslogtreecommitdiff
path: root/drivers/block/zloop.c
diff options
context:
space:
mode:
authorDamien Le Moal <dlemoal@kernel.org>2025-11-15 21:15:51 +0900
committerJens Axboe <axboe@kernel.dk>2025-11-17 09:40:09 -0700
commit866d65745b635927c3d1343ab67e6fd4a99d116d (patch)
treea3ded86e5d762e521166e252677eafa2bbf5608f /drivers/block/zloop.c
parent6483faa3938bfbd2c9f8ae090f647635f3bd2877 (diff)
zloop: make the write pointer of full zones invalid
The write pointer of zones that are in the full condition is always invalid. Reflect that fact by setting the write pointer of full zones to ULLONG_MAX. Fixes: eb0570c7df23 ("block: new zoned loop block device driver") Cc: stable@vger.kernel.org Signed-off-by: Damien Le Moal <dlemoal@kernel.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers/block/zloop.c')
-rw-r--r--drivers/block/zloop.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/block/zloop.c b/drivers/block/zloop.c
index 92be9f0af00a..a975b1d07f1c 100644
--- a/drivers/block/zloop.c
+++ b/drivers/block/zloop.c
@@ -177,7 +177,7 @@ static int zloop_update_seq_zone(struct zloop_device *zlo, unsigned int zone_no)
zone->wp = zone->start;
} else if (file_sectors == zlo->zone_capacity) {
zone->cond = BLK_ZONE_COND_FULL;
- zone->wp = zone->start + zlo->zone_size;
+ zone->wp = ULLONG_MAX;
} else {
zone->cond = BLK_ZONE_COND_CLOSED;
zone->wp = zone->start + file_sectors;
@@ -326,7 +326,7 @@ static int zloop_finish_zone(struct zloop_device *zlo, unsigned int zone_no)
}
zone->cond = BLK_ZONE_COND_FULL;
- zone->wp = zone->start + zlo->zone_size;
+ zone->wp = ULLONG_MAX;
clear_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags);
unlock:
@@ -433,8 +433,10 @@ static void zloop_rw(struct zloop_cmd *cmd)
* copmpletes.
*/
zone->wp += nr_sectors;
- if (zone->wp == zone_end)
+ if (zone->wp == zone_end) {
zone->cond = BLK_ZONE_COND_FULL;
+ zone->wp = ULLONG_MAX;
+ }
}
rq_for_each_bvec(tmp, rq, rq_iter)