[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v8 2/4] raw, qcow2: don't convert file size to s
From: |
Eric Blake |
Subject: |
Re: [Qemu-devel] [PATCH v8 2/4] raw, qcow2: don't convert file size to sector size |
Date: |
Wed, 23 Apr 2014 06:49:37 -0600 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 |
On 04/09/2014 01:12 AM, Hu Tao wrote:
> and avoid converting it back later.
>
> Signed-off-by: Hu Tao <address@hidden>
> ---
> block/qcow2.c | 8 ++++----
> block/raw-posix.c | 4 ++--
> block/raw-win32.c | 4 ++--
> 3 files changed, 8 insertions(+), 8 deletions(-)
>
> @@ -1777,7 +1777,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 = options->value.n / 512;
> + size = options->value.n & BDRV_SECTOR_MASK;
The old code rounds down, which in my opinion is a bug. The qcow2 file
format has a size parameter that is recorded in bytes, not sectors, so I
see no technical reason why we can't support a file where the last
sector is partial. If I request a size 1025 bytes, I should get a file
with 3 sectors (where the last sector is partial), and not a file with 2
sectors (where the last byte that I requested cannot be accessed). Your
patch preserves the pre-existing behavior, but I think this series
should consider fixing the bug and allowing for the creation of a qcow2
file whose size exposed to the guest is NOT a multiple of sector size,
or at least, at a bare minimum, round my request UP to the nearest
sector size rather than giving me something smaller than what I asked for.
> +++ b/block/raw-posix.c
> @@ -1246,7 +1246,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 = options->value.n / BDRV_SECTOR_SIZE;
> + total_size = options->value.n & BDRV_SECTOR_MASK;
Another case of incorrectly rounding down.
> +++ b/block/raw-win32.c
> @@ -486,7 +486,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 = options->value.n / 512;
> + total_size = options->value.n & BDRV_SECTOR_MASK;
and another
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
- [Qemu-devel] [PATCH v8 0/4] qemu-img: add preallocation=full, Hu Tao, 2014/04/09
- [Qemu-devel] [PATCH v8 1/4] qapi: introduce PreallocMode and a new PreallocMode full., Hu Tao, 2014/04/09
- [Qemu-devel] [PATCH v8 3/4] raw-posix: Add full image preallocation option, Hu Tao, 2014/04/09
- [Qemu-devel] [PATCH v8 2/4] raw, qcow2: don't convert file size to sector size, Hu Tao, 2014/04/09
- Re: [Qemu-devel] [PATCH v8 2/4] raw, qcow2: don't convert file size to sector size,
Eric Blake <=
- [Qemu-devel] [PATCH v8 4/4] qcow2: Add full image preallocation option, Hu Tao, 2014/04/09
- Re: [Qemu-devel] [PATCH v8 0/4] qemu-img: add preallocation=full, Hu Tao, 2014/04/23