]> git.ipfire.org Git - thirdparty/kernel/stable.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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 2 Jan 2026 11:57:28 +0000 (12:57 +0100)
commit 866d65745b635927c3d1343ab67e6fd4a99d116d upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/block/zloop.c

index e0123c16040d7b0cf2eeb88359608c11c479088c..39a425db670c8b8c9bc241faf22f10f36450dd15 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:
@@ -437,8 +437,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)