Previouly, "qemu-img convert" from ISO to VMDK with subformat=streamOptimized fails:
$ ./qemu-img convert -O vmdk -o subformat=streamOptimized foo.iso bar.vmdk VMDK: can't write to allocated cluster for streamOptimized qemu-img: error while writing sector 64: Input/output error Because current code in qemu-img.c uses the normal convert loop, rather than the compressed == true loop, which write by cluster size. In VMDK streamOptimized, writes must be in cluster unit, because overlapped write to an allocated cluster is not supported. This series adds an is_compressed field in BlockDriverInfo, and use compressed convertion loop if the block driver set this field to true. Implement .bdrv_get_info and .bdrv_write_compressed in VMDK driver to fit into this framework. Fam Zheng (5): qemu-img: Convert by cluster size if target is compressed vmdk: Implement .bdrv_write_compressed block: Change BlockDriverInfo.cluster_size to 64 bits vmdk: Implement .bdrv_get_info() mirror: Check for bdrv_get_info result block/mirror.c | 4 ++-- block/vmdk.c | 33 +++++++++++++++++++++++++++++++++ include/block/block.h | 3 ++- qemu-img.c | 8 ++++++-- tests/qemu-iotests/059.out | 1 + 5 files changed, 44 insertions(+), 5 deletions(-) -- 1.8.4.2