On 10.07.20 16:21, Kevin Wolf wrote: > Unaligned requests will automatically be aligned to bl.request_alignment > and we don't want to extend requests to access space beyond the end of > the image, so it's required that the image size is aligned. > > With write requests, this could cause assertion failures like this if > RESIZE permissions weren't requested: > > qemu-img: block/io.c:1910: bdrv_co_write_req_prepare: Assertion `end_sector <= bs->total_sectors || child->perm & BLK_PERM_RESIZE' failed. > > This was e.g. triggered by qemu-img converting to a target image with 4k > request alignment when the image was only aligned to 512 bytes, but not > to 4k. > > Signed-off-by: Kevin Wolf > --- > block.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) (I think we had some proposal like this before, but I can’t find it, unfortunately...) I can’t see how with this patch you could create qcow2 images and then use them with direct I/O, because AFAICS, qemu-img create doesn’t allow specifying caching options, so AFAIU you’re stuck with: $ ./qemu-img create -f qcow2 /mnt/tmp/foo.qcow2 1M Formatting '/mnt/tmp/foo.qcow2', fmt=qcow2 cluster_size=65536 compression_type=zlib size=1048576 lazy_refcounts=off refcount_bits=16 $ sudo ./qemu-io -t none /mnt/tmp/foo.qcow2 qemu-io: can't open device /mnt/tmp/foo.qcow2: Image size is not a multiple of request alignment (/mnt/tmp is a filesystem on a “losetup -b 4096” device.) Or you use blockdev-create, that seems to work (because of course you can set the cache mode on the protocol node when you open it for formatting). But, well, I think there should be a working qemu-img create case. Also, I’m afraid of breaking existing use cases with this patch (just qemu-img create + using the image with cache=none). Max