On 2018-04-23 15:19, Alberto Garcia wrote:
> On Sat 21 Apr 2018 12:09:10 AM CEST, Max Reitz wrote:
>> Currently we do not take permissions on a file while it is being
>> created. That is a bit sad. The simplest way to test this is the
>> following:
>>
>> $ qemu-img create -f qcow2 foo.qcow2 64M
>> Formatting 'foo.qcow2', fmt=qcow2 size=67108864 cluster_size=65536 lazy_refcounts=off refcount_bits=16
>> $ qemu-img convert -f qcow2 -O qcow2 foo.qcow2 foo.qcow2
>> qemu-img: foo.qcow2: error while converting qcow2: Failed to get "write" lock
>> Is another process using the image?
>> $ qemu-img info foo.qcow2
>> image: foo.qcow2
>> file format: raw
>> virtual size: 0 (0 bytes)
>> disk size: 0
>
> Not quite the same problem, but here's another example of QEMU creating
> an image before checking if it can be created:
>
> $ qemu-img create -o cluster_size=2M -f qcow2 img.qcow2 7E
> Formatting 'img.qcow2', fmt=qcow2 size=8070450532247928832 encryption=off cluster_size=2097152 lazy_refcounts=off refcount_bits=16
> qemu-img: img.qcow2: The image size is too large for file format 'qcow2' (try using a larger cluster size)
>
> $ qemu-img info img.qcow2
> image: img.qcow2
> file format: qcow2
> virtual size: 0 (0 bytes)
> disk size: 6.0M
> cluster_size: 2097152
> Format specific information:
> compat: 1.1
> lazy refcounts: false
> refcount bits: 16
> corrupt: false
>
> Berto
Actually a very different problem, and I think we are not going to
change this behavior -- especially considering the direction
blockdev-create is taking (that is, separating protocol file creation
and formatting).
The main reason why it's a different problem, though, is because it
doesn't mean any data loss. You just get a stale file lying around.
(You could argue that in any case the file should at least be a raw file
of size 0, because the qcow2 driver should not start formatting until it
has checked all options, but, well... I don't know how that would help
anyone.)
Max