and avoid converting it back later. And round up file size to nearest sector.
Signed-off-by: Hu Tao <hu...@cn.fujitsu.com> --- block/qcow2.c | 8 ++++---- block/raw-posix.c | 4 ++-- block/raw-win32.c | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/block/qcow2.c b/block/qcow2.c index 75b28cd..6732e7c 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -1714,7 +1714,7 @@ static int qcow2_create2(const char *filename, int64_t total_size, } /* Okay, now that we have a valid image, let's give it the right size */ - ret = bdrv_truncate(bs, total_size * BDRV_SECTOR_SIZE); + ret = bdrv_truncate(bs, total_size); if (ret < 0) { error_setg_errno(errp, -ret, "Could not resize image"); goto out; @@ -1767,7 +1767,7 @@ static int qcow2_create(const char *filename, QEMUOptionParameter *options, { const char *backing_file = NULL; const char *backing_fmt = NULL; - uint64_t sectors = 0; + uint64_t size = 0; int flags = 0; size_t cluster_size = DEFAULT_CLUSTER_SIZE; int prealloc = 0; @@ -1778,7 +1778,7 @@ static int qcow2_create(const char *filename, QEMUOptionParameter *options, /* Read out options */ while (options && options->name) { if (!strcmp(options->name, BLOCK_OPT_SIZE)) { - sectors = DIV_ROUND_UP(options->value.n, BDRV_SECTOR_SIZE); + size = ROUND_UP(options->value.n, BDRV_SECTOR_SIZE); } else if (!strcmp(options->name, BLOCK_OPT_BACKING_FILE)) { backing_file = options->value.s; } else if (!strcmp(options->name, BLOCK_OPT_BACKING_FMT)) { @@ -1829,7 +1829,7 @@ static int qcow2_create(const char *filename, QEMUOptionParameter *options, return -EINVAL; } - ret = qcow2_create2(filename, sectors, backing_file, backing_fmt, flags, + ret = qcow2_create2(filename, size, backing_file, backing_fmt, flags, cluster_size, prealloc, options, version, &local_err); if (local_err) { error_propagate(errp, local_err); diff --git a/block/raw-posix.c b/block/raw-posix.c index c5b81e1..35057f0 100644 --- a/block/raw-posix.c +++ b/block/raw-posix.c @@ -1285,7 +1285,7 @@ static int raw_create(const char *filename, QEMUOptionParameter *options, /* Read out options */ while (options && options->name) { if (!strcmp(options->name, BLOCK_OPT_SIZE)) { - total_size = DIV_ROUND_UP(options->value.n, BDRV_SECTOR_SIZE); + total_size = ROUND_UP(options->value.n, BDRV_SECTOR_SIZE); } options++; } @@ -1296,7 +1296,7 @@ static int raw_create(const char *filename, QEMUOptionParameter *options, result = -errno; error_setg_errno(errp, -result, "Could not create file"); } else { - if (ftruncate(fd, total_size * BDRV_SECTOR_SIZE) != 0) { + if (ftruncate(fd, total_size) != 0) { result = -errno; error_setg_errno(errp, -result, "Could not resize file"); } diff --git a/block/raw-win32.c b/block/raw-win32.c index 8f83fab..f681648 100644 --- a/block/raw-win32.c +++ b/block/raw-win32.c @@ -514,7 +514,7 @@ static int raw_create(const char *filename, QEMUOptionParameter *options, /* Read out options */ while (options && options->name) { if (!strcmp(options->name, BLOCK_OPT_SIZE)) { - total_size = DIV_ROUND_UP(options->value.n, BDRV_SECTOR_SIZE); + total_size = ROUND_UP(options->value.n, BDRV_SECTOR_SIZE); } options++; } @@ -526,7 +526,7 @@ static int raw_create(const char *filename, QEMUOptionParameter *options, return -EIO; } set_sparse(fd); - ftruncate(fd, total_size * 512); + ftruncate(fd, total_size); qemu_close(fd); return 0; } -- 1.9.3