]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
zloop: make the write pointer of full zones invalid
authorDamien Le Moal <dlemoal@kernel.org>
Sat, 15 Nov 2025 12:15:51 +0000 (21:15 +0900)
committerJens Axboe <axboe@kernel.dk>
Mon, 17 Nov 2025 16:40:09 +0000 (09:40 -0700)
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>
drivers/block/zloop.c

index 92be9f0af00a100b565db44857ad292a2948d7e8..a975b1d07f1c53f8de910af9fb13200cea27a5cd 100644 (file)
@@ -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)