mirror of https://github.com/xemu-project/xemu.git
vmdk: Implement .bdrv_get_info()
This will return cluster_size and needs_compressed_writes to caller, if all the extents have the same value (or there's only one extent). Otherwise return -ENOTSUP. cluster_size is only reported for sparse formats. Signed-off-by: Fam Zheng <famz@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
ba0ad89e2c
commit
74fe188cd1
21
block/vmdk.c
21
block/vmdk.c
|
@ -2076,6 +2076,26 @@ static ImageInfoSpecific *vmdk_get_specific_info(BlockDriverState *bs)
|
||||||
return spec_info;
|
return spec_info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int vmdk_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
BDRVVmdkState *s = bs->opaque;
|
||||||
|
assert(s->num_extents);
|
||||||
|
bdi->needs_compressed_writes = s->extents[0].compressed;
|
||||||
|
if (!s->extents[0].flat) {
|
||||||
|
bdi->cluster_size = s->extents[0].cluster_sectors << BDRV_SECTOR_BITS;
|
||||||
|
}
|
||||||
|
/* See if we have multiple extents but they have different cases */
|
||||||
|
for (i = 1; i < s->num_extents; i++) {
|
||||||
|
if (bdi->needs_compressed_writes != s->extents[i].compressed ||
|
||||||
|
(bdi->cluster_size && bdi->cluster_size !=
|
||||||
|
s->extents[i].cluster_sectors << BDRV_SECTOR_BITS)) {
|
||||||
|
return -ENOTSUP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static QEMUOptionParameter vmdk_create_options[] = {
|
static QEMUOptionParameter vmdk_create_options[] = {
|
||||||
{
|
{
|
||||||
.name = BLOCK_OPT_SIZE,
|
.name = BLOCK_OPT_SIZE,
|
||||||
|
@ -2132,6 +2152,7 @@ static BlockDriver bdrv_vmdk = {
|
||||||
.bdrv_has_zero_init = vmdk_has_zero_init,
|
.bdrv_has_zero_init = vmdk_has_zero_init,
|
||||||
.bdrv_get_specific_info = vmdk_get_specific_info,
|
.bdrv_get_specific_info = vmdk_get_specific_info,
|
||||||
.bdrv_refresh_limits = vmdk_refresh_limits,
|
.bdrv_refresh_limits = vmdk_refresh_limits,
|
||||||
|
.bdrv_get_info = vmdk_get_info,
|
||||||
|
|
||||||
.create_options = vmdk_create_options,
|
.create_options = vmdk_create_options,
|
||||||
};
|
};
|
||||||
|
|
|
@ -2050,6 +2050,7 @@ qemu-img: Could not open 'TEST_DIR/t.IMGFMT': File truncated, expecting at least
|
||||||
image: TEST_DIR/iotest-version3.IMGFMT
|
image: TEST_DIR/iotest-version3.IMGFMT
|
||||||
file format: IMGFMT
|
file format: IMGFMT
|
||||||
virtual size: 1.0G (1073741824 bytes)
|
virtual size: 1.0G (1073741824 bytes)
|
||||||
|
cluster_size: 65536
|
||||||
|
|
||||||
=== Testing 4TB monolithicFlat creation and IO ===
|
=== Testing 4TB monolithicFlat creation and IO ===
|
||||||
Formatting 'TEST_DIR/iotest-version3.IMGFMT', fmt=IMGFMT size=4398046511104
|
Formatting 'TEST_DIR/iotest-version3.IMGFMT', fmt=IMGFMT size=4398046511104
|
||||||
|
|
Loading…
Reference in New Issue