mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
zloop: truncate finished zones to zone capacity
The size of a sequential zone backing file records the amount of data
written and is used to restore the zone state. A backing file whose size
is equal to the zone capacity is restored as a full zone, while a file
larger than the zone capacity is rejected as invalid.
However, zloop_finish_zone() currently truncates the backing file to the
zone size. For devices with a reduced zone capacity, finishing a zone
therefore creates a backing file larger than the zone capacity. After the
device is removed and later re-added, that zone file is rejected instead
of being restored as a full zone.
Truncate finished sequential zones to the zone capacity, matching the
persistent representation accepted by zloop_update_seq_zone() for a full
zone.
Suggested-by: Damien Le Moal <dlemoal@kernel.org>
Fixes: eb0570c7df ("block: new zoned loop block device driver")
Cc: stable@vger.kernel.org
Signed-off-by: Xu Rao <raoxu@uniontech.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Link: https://patch.msgid.link/B39E5FD81D1A07F4+20260804023403.939767-1-raoxu@uniontech.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
d507d3cb19
commit
72e67c1186
|
|
@ -30,11 +30,10 @@ indicates the position of the write pointer of the zone.
|
|||
|
||||
When resetting a sequential zone, its backing file size is truncated to zero.
|
||||
Conversely, for a zone finish operation, the backing file is truncated to the
|
||||
zone size. With this, the maximum capacity of a zloop zoned block device created
|
||||
can be larger configured to be larger than the storage space available on the
|
||||
backing file system. Of course, for such configuration, writing more data than
|
||||
the storage space available on the backing file system will result in write
|
||||
errors.
|
||||
zone capacity. With this, a zloop zoned block device can be configured with a
|
||||
larger capacity than the storage space available on the backing file system. Of
|
||||
course, for such configuration, writing more data than the storage space
|
||||
available on the backing file system will result in write errors.
|
||||
|
||||
The zoned loop block device driver implements a complete zone transition state
|
||||
machine. That is, zones can be empty, implicitly opened, explicitly opened,
|
||||
|
|
|
|||
|
|
@ -479,7 +479,8 @@ static int zloop_finish_zone(struct zloop_device *zlo, unsigned int zone_no)
|
|||
zone->cond == BLK_ZONE_COND_FULL)
|
||||
goto unlock;
|
||||
|
||||
if (vfs_truncate(&zone->file->f_path, zlo->zone_size << SECTOR_SHIFT)) {
|
||||
if (vfs_truncate(&zone->file->f_path,
|
||||
zlo->zone_capacity << SECTOR_SHIFT)) {
|
||||
set_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags);
|
||||
ret = -EIO;
|
||||
goto unlock;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user