[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH v2 1/7] vmdk: Refactor and introduce new helper func
From: |
Ashijeet Acharya |
Subject: |
[Qemu-block] [PATCH v2 1/7] vmdk: Refactor and introduce new helper functions |
Date: |
Sat, 25 Mar 2017 16:48:15 +0530 |
Move the existing vmdk_find_offset_in_cluster() function to the top of
the driver. Also, introduce a new helper function size_to_clusters()
which returns the number of clusters for a given size in bytes. Here,
we leave the last cluster as we need to perform COW for that one.
Signed-off-by: Ashijeet Acharya <address@hidden>
---
block/vmdk.c | 32 ++++++++++++++++++++------------
1 file changed, 20 insertions(+), 12 deletions(-)
diff --git a/block/vmdk.c b/block/vmdk.c
index a9bd22b..7795c5f 100644
--- a/block/vmdk.c
+++ b/block/vmdk.c
@@ -242,6 +242,26 @@ static void vmdk_free_last_extent(BlockDriverState *bs)
s->extents = g_renew(VmdkExtent, s->extents, s->num_extents);
}
+static inline uint64_t vmdk_find_offset_in_cluster(VmdkExtent *extent,
+ int64_t offset)
+{
+ uint64_t extent_begin_offset, extent_relative_offset;
+ uint64_t cluster_size = extent->cluster_sectors * BDRV_SECTOR_SIZE;
+
+ extent_begin_offset =
+ (extent->end_sector - extent->sectors) * BDRV_SECTOR_SIZE;
+ extent_relative_offset = offset - extent_begin_offset;
+ return extent_relative_offset % cluster_size;
+}
+
+static inline uint64_t size_to_clusters(VmdkExtent *extent, uint64_t size)
+{
+ uint64_t cluster_size, round_off_size;
+ cluster_size = extent->cluster_sectors * BDRV_SECTOR_SIZE;
+ round_off_size = cluster_size - (size % cluster_size);
+ return ((size + round_off_size) >> 16) - 1;
+}
+
static uint32_t vmdk_read_cid(BlockDriverState *bs, int parent)
{
char *desc;
@@ -1266,18 +1286,6 @@ static VmdkExtent *find_extent(BDRVVmdkState *s,
return NULL;
}
-static inline uint64_t vmdk_find_offset_in_cluster(VmdkExtent *extent,
- int64_t offset)
-{
- uint64_t extent_begin_offset, extent_relative_offset;
- uint64_t cluster_size = extent->cluster_sectors * BDRV_SECTOR_SIZE;
-
- extent_begin_offset =
- (extent->end_sector - extent->sectors) * BDRV_SECTOR_SIZE;
- extent_relative_offset = offset - extent_begin_offset;
- return extent_relative_offset % cluster_size;
-}
-
static inline uint64_t vmdk_find_index_in_cluster(VmdkExtent *extent,
int64_t sector_num)
{
--
2.6.2
- [Qemu-block] [PATCH v2 0/7] Optiomize VMDK I/O by allocating multiple clusters, Ashijeet Acharya, 2017/03/25
- [Qemu-block] [PATCH v2 1/7] vmdk: Refactor and introduce new helper functions,
Ashijeet Acharya <=
- [Qemu-block] [PATCH v2 2/7] vmdk: Rename get_whole_cluster() to vmdk_perform_cow(), Ashijeet Acharya, 2017/03/25
- [Qemu-block] [PATCH v2 3/7] vmdk: Factor out metadata loading code out of get_cluster_offset(), Ashijeet Acharya, 2017/03/25
- [Qemu-block] [PATCH v2 4/7] vmdk: New functions to allocate multiple clusters and cluster offset, Ashijeet Acharya, 2017/03/25
- [Qemu-block] [PATCH v2 5/7] vmdk: Rename get_cluster_offset() to vmdk_get_cluster_offset(), Ashijeet Acharya, 2017/03/25
- [Qemu-block] [PATCH v2 6/7] vmdk: Allocate multiple clusters at once, Ashijeet Acharya, 2017/03/25
- [Qemu-block] [PATCH v2 7/7] vmdk: Update metadata for multiple clusters, Ashijeet Acharya, 2017/03/25