Fam Zheng
2014-02-11 03:28:34 UTC
Previouly, conversion 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
Current code in qemu-img.c picks the normal convert loop for this case, rather
than the "compress == true" loop, which writes in target cluster size. In VMDK
streamOptimized, writes must be in cluster unit, because 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 procedure.
v2: Rebase to current master.
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 | 3 +++
tests/qemu-iotests/059.out | 4 ++++
5 files changed, 44 insertions(+), 3 deletions(-)
$ ./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
Current code in qemu-img.c picks the normal convert loop for this case, rather
than the "compress == true" loop, which writes in target cluster size. In VMDK
streamOptimized, writes must be in cluster unit, because 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 procedure.
v2: Rebase to current master.
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 | 3 +++
tests/qemu-iotests/059.out | 4 ++++
5 files changed, 44 insertions(+), 3 deletions(-)
--
1.8.5.4
1.8.5.4