[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 08/17] vmdk: Implement .bdrv_get_info()
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PULL 08/17] vmdk: Implement .bdrv_get_info() |
Date: |
Fri, 9 May 2014 21:03:28 +0200 |
From: Fam Zheng <address@hidden>
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 <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
block/vmdk.c | 21 +++++++++++++++++++++
tests/qemu-iotests/059.out | 1 +
2 files changed, 22 insertions(+)
diff --git a/block/vmdk.c b/block/vmdk.c
index 057c3f1..480ea37 100644
--- a/block/vmdk.c
+++ b/block/vmdk.c
@@ -2076,6 +2076,26 @@ static ImageInfoSpecific
*vmdk_get_specific_info(BlockDriverState *bs)
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[] = {
{
.name = BLOCK_OPT_SIZE,
@@ -2132,6 +2152,7 @@ static BlockDriver bdrv_vmdk = {
.bdrv_has_zero_init = vmdk_has_zero_init,
.bdrv_get_specific_info = vmdk_get_specific_info,
.bdrv_refresh_limits = vmdk_refresh_limits,
+ .bdrv_get_info = vmdk_get_info,
.create_options = vmdk_create_options,
};
diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out
index 3371c86..14c0957 100644
--- a/tests/qemu-iotests/059.out
+++ b/tests/qemu-iotests/059.out
@@ -2050,6 +2050,7 @@ qemu-img: Could not open 'TEST_DIR/t.IMGFMT': File
truncated, expecting at least
image: TEST_DIR/iotest-version3.IMGFMT
file format: IMGFMT
virtual size: 1.0G (1073741824 bytes)
+cluster_size: 65536
=== Testing 4TB monolithicFlat creation and IO ===
Formatting 'TEST_DIR/iotest-version3.IMGFMT', fmt=IMGFMT size=4398046511104
--
1.9.0
- [Qemu-devel] [PULL 02/17] iotests: Use configured python, (continued)
- [Qemu-devel] [PULL 04/17] block/nfs: Check for NULL server part, Stefan Hajnoczi, 2014/05/09
- [Qemu-devel] [PULL 06/17] qemu-img: Convert by cluster size if target is compressed, Stefan Hajnoczi, 2014/05/09
- [Qemu-devel] [PULL 05/17] block/iscsi: bump year in copyright notice, Stefan Hajnoczi, 2014/05/09
- [Qemu-devel] [PULL 07/17] vmdk: Implement .bdrv_write_compressed, Stefan Hajnoczi, 2014/05/09
- [Qemu-devel] [PULL 08/17] vmdk: Implement .bdrv_get_info(),
Stefan Hajnoczi <=
- [Qemu-devel] [PULL 09/17] qemu-iotests: Test converting to streamOptimized from small cluster size, Stefan Hajnoczi, 2014/05/09
- [Qemu-devel] [PULL 10/17] block: Fix open flags with BDRV_O_SNAPSHOT, Stefan Hajnoczi, 2014/05/09
- [Qemu-devel] [PULL 11/17] vl.c: remove init_clocks call from main, Stefan Hajnoczi, 2014/05/09
- [Qemu-devel] [PULL 12/17] gluster: Correctly propagate errors when volume isn't accessible, Stefan Hajnoczi, 2014/05/09
[Qemu-devel] [PULL 13/17] block/raw-posix: Try both FIEMAP and SEEK_HOLE, Stefan Hajnoczi, 2014/05/09
[Qemu-devel] [PULL 14/17] block: qemu-iotests - add common.qemu, for bash-controlled qemu tests, Stefan Hajnoczi, 2014/05/09
[Qemu-devel] [PULL 15/17] block: qemu-iotests - update 085 to use common.qemu, Stefan Hajnoczi, 2014/05/09