qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] qcow2: Fix preallocation on block devices


From: Kevin Wolf
Subject: Re: [PATCH] qcow2: Fix preallocation on block devices
Date: Thu, 7 May 2020 10:39:24 +0200

Am 05.05.2020 um 16:18 hat Max Reitz geschrieben:
> Calling bdrv_getlength() to get the pre-truncate file size will not
> really work on block devices, because they have always the same length,
> and trying to write beyond it will fail with a rather cryptic error
> message.
> 
> Instead, we should use qcow2_get_last_cluster() and bdrv_getlength()
> only as a fallback.
> 
> Before this patch:
> $ truncate -s 1G test.img
> $ sudo losetup -f --show test.img
> /dev/loop0
> $ sudo qemu-img create -f qcow2 -o preallocation=full /dev/loop0 64M
> Formatting '/dev/loop0', fmt=qcow2 size=67108864 cluster_size=65536
> preallocation=full lazy_refcounts=off refcount_bits=16
> qemu-img: /dev/loop0: Could not resize image: Failed to resize refcount
> structures: No space left on device
> 
> With this patch:
> $ sudo qemu-img create -f qcow2 -o preallocation=full /dev/loop0 64M
> Formatting '/dev/loop0', fmt=qcow2 size=67108864 cluster_size=65536
> preallocation=full lazy_refcounts=off refcount_bits=16
> qemu-img: /dev/loop0: Could not resize image: Failed to resize
> underlying file: Preallocation mode 'full' unsupported for this
> non-regular file
> 
> So as you can see, it still fails, but now the problem is missing
> support on the block device level, so we at least get a better error
> message.
> 
> Note that we cannot preallocate block devices on truncate by design,
> because we do not know what area to preallocate.  Their length is always
> the same, the truncate operation does not change it.
> 
> Signed-off-by: Max Reitz <address@hidden>

Thanks, applied to the block branch.

Kevin




reply via email to

[Prev in Thread] Current Thread [Next in Thread]