diff options
-rw-r--r-- | block/qcow2-cluster.c | 14 | ||||
-rw-r--r-- | block/qcow2-refcount.c | 3 | ||||
-rw-r--r-- | block/qcow2.h | 2 | ||||
-rw-r--r-- | qemu-img.c | 2 |
4 files changed, 12 insertions, 9 deletions
diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c index 54e505cbed..e444e53e13 100644 --- a/block/qcow2-cluster.c +++ b/block/qcow2-cluster.c @@ -264,7 +264,7 @@ static int count_contiguous_clusters(uint64_t nb_clusters, int cluster_size, return 0; for (i = start; i < start + nb_clusters; i++) - if (offset + i * cluster_size != (be64_to_cpu(l2_table[i]) & ~mask)) + if (offset + (uint64_t) i * cluster_size != (be64_to_cpu(l2_table[i]) & ~mask)) break; return (i - start); @@ -395,10 +395,11 @@ uint64_t qcow2_get_cluster_offset(BlockDriverState *bs, uint64_t offset, int *num) { BDRVQcowState *s = bs->opaque; - int l1_index, l2_index; + unsigned int l1_index, l2_index; uint64_t l2_offset, *l2_table, cluster_offset; int l1_bits, c; - int index_in_cluster, nb_available, nb_needed, nb_clusters; + unsigned int index_in_cluster, nb_clusters; + uint64_t nb_available, nb_needed; index_in_cluster = (offset >> 9) & (s->cluster_sectors - 1); nb_needed = *num + index_in_cluster; @@ -409,7 +410,7 @@ uint64_t qcow2_get_cluster_offset(BlockDriverState *bs, uint64_t offset, * the end of the l1 entry */ - nb_available = (1 << l1_bits) - (offset & ((1 << l1_bits) - 1)); + nb_available = (1ULL << l1_bits) - (offset & ((1ULL << l1_bits) - 1)); /* compute the number of available sectors */ @@ -483,8 +484,9 @@ static int get_cluster_table(BlockDriverState *bs, uint64_t offset, int *new_l2_index) { BDRVQcowState *s = bs->opaque; - int l1_index, l2_index, ret; + unsigned int l1_index, l2_index; uint64_t l2_offset, *l2_table; + int ret; /* seek the the l2 offset in the l1 table */ @@ -683,7 +685,7 @@ uint64_t qcow2_alloc_cluster_offset(BlockDriverState *bs, BDRVQcowState *s = bs->opaque; int l2_index, ret; uint64_t l2_offset, *l2_table, cluster_offset; - int nb_clusters, i = 0; + unsigned int nb_clusters, i = 0; QCowL2Meta *old_alloc; ret = get_cluster_table(bs, offset, &l2_table, &l2_offset, &l2_index); diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c index 0aac2edee1..609eee1891 100644 --- a/block/qcow2-refcount.c +++ b/block/qcow2-refcount.c @@ -192,7 +192,8 @@ static int64_t alloc_refcount_block(BlockDriverState *bs, int64_t cluster_index) { BDRVQcowState *s = bs->opaque; int64_t offset, refcount_block_offset; - int ret, refcount_table_index; + unsigned int refcount_table_index; + int ret; uint64_t data64; int cache = cache_refcount_updates; diff --git a/block/qcow2.h b/block/qcow2.h index ecc94cbfad..26ab5d9523 100644 --- a/block/qcow2.h +++ b/block/qcow2.h @@ -47,7 +47,7 @@ #define REFCOUNT_SHIFT 1 /* refcount size is 2 bytes */ #define MIN_CLUSTER_BITS 9 -#define MAX_CLUSTER_BITS 16 +#define MAX_CLUSTER_BITS 21 #define L2_CACHE_SIZE 16 diff --git a/qemu-img.c b/qemu-img.c index 070fe2e229..204f618c6e 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -530,7 +530,7 @@ static int is_allocated_sectors(const uint8_t *buf, int n, int *pnum) return v; } -#define IO_BUF_SIZE 65536 +#define IO_BUF_SIZE (2 * 1024 * 1024) static int img_convert(int argc, char **argv) { |