[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC 17/24] qcow2: add qcow2_get_mapping
From: |
Devin Nakamura |
Subject: |
[Qemu-devel] [RFC 17/24] qcow2: add qcow2_get_mapping |
Date: |
Fri, 29 Jul 2011 00:49:47 -0400 |
Signed-off-by: Devin Nakamura <address@hidden>
---
block/qcow2.c | 36 ++++++++++++++++++++++++++++++++++++
1 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/block/qcow2.c b/block/qcow2.c
index 48e1b95..05ea40c 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -1340,6 +1340,40 @@ static int qcow2_load_vmstate(BlockDriverState *bs,
uint8_t *buf,
return ret;
}
+static int qcow2_get_mapping(BlockDriverState *bs, uint64_t *guest_offset,
+ uint64_t *host_offset, uint64_t *contiguous_bytes)
+{
+ uint64_t cluster_offset, pos;
+ //BDRVQcowState *s = bs->opaque;
+ int ret, count;
+ pos = *guest_offset + *contiguous_bytes;
+
+ if (pos >= bs->total_sectors << BDRV_SECTOR_BITS) {
+ *contiguous_bytes = 0;
+ return 0;
+ }
+ count = 0;
+ do {
+ pos += count << BDRV_SECTOR_BITS;
+ count = INT_MAX;
+ ret = qcow2_get_cluster_offset(bs, pos, &count, &cluster_offset);
+ if (ret) {
+ *contiguous_bytes = 0;
+ return ret;
+ }
+ } while (!cluster_offset && pos < bs->total_sectors * BDRV_SECTOR_SIZE);
+
+ if (pos >= bs->total_sectors << BDRV_SECTOR_BITS || !cluster_offset) {
+ *contiguous_bytes = 0;
+ return 0;
+ }
+
+ *contiguous_bytes = count << BDRV_SECTOR_BITS;
+ *guest_offset = pos;
+ *host_offset = cluster_offset;
+ return 0;
+}
+
static QEMUOptionParameter qcow2_create_options[] = {
{
.name = BLOCK_OPT_SIZE,
@@ -1409,6 +1443,8 @@ static BlockDriver bdrv_qcow2 = {
.create_options = qcow2_create_options,
.bdrv_check = qcow2_check,
+
+ .bdrv_get_mapping = qcow2_get_mapping,
};
static void bdrv_qcow2_init(void)
--
1.7.6.rc1
- [Qemu-devel] [RFC 07/24] qed: make qed_alloc_clusters round up offset to nearest cluster, (continued)
- [Qemu-devel] [RFC 07/24] qed: make qed_alloc_clusters round up offset to nearest cluster, Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 08/24] qed: add qed_find_cluster_sync(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 10/24] qed: add qed_bdrv_map(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 11/24] qed: add open_conversion_target(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 09/24] qed: add qed_bdrv_get_mapping(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 13/24] qed: add bdrv_qed_get_conversion_options(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 12/24] qed: add bdrv_qed_copy_header(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 15/24] qcow2: split up the creation of new refcount table from the act of checking it, Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 14/24] qcow2: fix typo in documentation for qcow2_get_cluster_offset(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 16/24] qcow2: add qcow2_drop_leaked_clusters(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 17/24] qcow2: add qcow2_get_mapping,
Devin Nakamura <=
- [Qemu-devel] [RFC 18/24] qcow2: add qcow2_map, Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 19/24] qcow2: add qcow2_copy_header(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 21/24] qcow2: add qcow2_open_conversion_target(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 23/24] qemu-io: add setmap command, Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 24/24] qemu-img: add inplace conversion to qemu-img, Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 22/24] qemu-io: make map command use new block mapping function, Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 20/24] qcow2: add get_conversion_options(), Devin Nakamura, 2011/07/29