[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v5 09/21] qemu-img: always probe the input image for
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH v5 09/21] qemu-img: always probe the input image for allocated sectors |
Date: |
Wed, 4 Sep 2013 19:00:26 +0200 |
qemu-img convert can assume "that sectors which are unallocated in the
input image are present in both the output's and input's base images".
However it is only doing this if the output image returns true for
bdrv_has_zero_init(). Testing bdrv_has_zero_init() does not make much
sense if the output image is copy-on-write, because a copy-on-write
image is never initialized to zero (it is initialized to the content
of the backing file).
There is nothing here that makes has_zero_init images special. The
input and output must be equal for the operation to make sense, and
that's it.
Reviewed-by: Eric Blake <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
qemu-img.c | 40 +++++++++++++++++++---------------------
1 file changed, 19 insertions(+), 21 deletions(-)
diff --git a/qemu-img.c b/qemu-img.c
index b01998b..837f8bc 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -1479,28 +1479,26 @@ static int img_convert(int argc, char **argv)
n = bs_offset + bs_sectors - sector_num;
}
- if (has_zero_init) {
- /* If the output image is being created as a copy on write
image,
- assume that sectors which are unallocated in the input image
- are present in both the output's and input's base images (no
- need to copy them). */
- if (out_baseimg) {
- ret = bdrv_is_allocated(bs[bs_i], sector_num - bs_offset,
- n, &n1);
- if (ret < 0) {
- error_report("error while reading metadata for sector "
- "%" PRId64 ": %s",
- sector_num - bs_offset, strerror(-ret));
- goto out;
- }
- if (!ret) {
- sector_num += n1;
- continue;
- }
- /* The next 'n1' sectors are allocated in the input image.
Copy
- only those as they may be followed by unallocated
sectors. */
- n = n1;
+ /* If the output image is being created as a copy on write image,
+ assume that sectors which are unallocated in the input image
+ are present in both the output's and input's base images (no
+ need to copy them). */
+ if (out_baseimg) {
+ ret = bdrv_is_allocated(bs[bs_i], sector_num - bs_offset,
+ n, &n1);
+ if (ret < 0) {
+ error_report("error while reading metadata for sector "
+ "%" PRId64 ": %s",
+ sector_num - bs_offset, strerror(-ret));
+ goto out;
+ }
+ if (!ret) {
+ sector_num += n1;
+ continue;
}
+ /* The next 'n1' sectors are allocated in the input image. Copy
+ only those as they may be followed by unallocated sectors.
*/
+ n = n1;
} else {
n1 = n;
}
--
1.8.3.1
- [Qemu-devel] [PATCH v5 03/21] cow: do not call bdrv_co_is_allocated, (continued)
- [Qemu-devel] [PATCH v5 03/21] cow: do not call bdrv_co_is_allocated, Paolo Bonzini, 2013/09/04
- [Qemu-devel] [PATCH v5 04/21] block: keep bs->total_sectors up to date even for growable block devices, Paolo Bonzini, 2013/09/04
- [Qemu-devel] [PATCH v5 06/21] block: do not use ->total_sectors in bdrv_co_is_allocated, Paolo Bonzini, 2013/09/04
- [Qemu-devel] [PATCH v5 05/21] block: make bdrv_co_is_allocated static, Paolo Bonzini, 2013/09/04
- [Qemu-devel] [PATCH v5 08/21] block: expect errors from bdrv_co_is_allocated, Paolo Bonzini, 2013/09/04
- [Qemu-devel] [PATCH v5 07/21] block: remove bdrv_is_allocated_above/bdrv_co_is_allocated_above distinction, Paolo Bonzini, 2013/09/04
- [Qemu-devel] [PATCH v5 10/21] block: make bdrv_has_zero_init return false for copy-on-write-images, Paolo Bonzini, 2013/09/04
- [Qemu-devel] [PATCH v5 11/21] block: introduce bdrv_get_block_status API, Paolo Bonzini, 2013/09/04
- [Qemu-devel] [PATCH v5 12/21] block: define get_block_status return value, Paolo Bonzini, 2013/09/04
- [Qemu-devel] [PATCH v5 13/21] block: return get_block_status data and flags for formats, Paolo Bonzini, 2013/09/04
- [Qemu-devel] [PATCH v5 09/21] qemu-img: always probe the input image for allocated sectors,
Paolo Bonzini <=
- [Qemu-devel] [PATCH v5 14/21] block: use bdrv_has_zero_init to return BDRV_BLOCK_ZERO, Paolo Bonzini, 2013/09/04
- [Qemu-devel] [PATCH v5 16/21] qemu-img: add a "map" subcommand, Paolo Bonzini, 2013/09/04
- [Qemu-devel] [PATCH v5 15/21] block: return BDRV_BLOCK_ZERO past end of backing file, Paolo Bonzini, 2013/09/04
- [Qemu-devel] [PATCH v5 17/21] docs, qapi: document qemu-img map, Paolo Bonzini, 2013/09/04
- [Qemu-devel] [PATCH v5 18/21] raw-posix: return get_block_status data and flags, Paolo Bonzini, 2013/09/04
- [Qemu-devel] [PATCH v5 19/21] raw-posix: report unwritten extents as zero, Paolo Bonzini, 2013/09/04
- [Qemu-devel] [PATCH v5 20/21] block: add default get_block_status implementation for protocols, Paolo Bonzini, 2013/09/04
- [Qemu-devel] [PATCH v5 21/21] block: look for zero blocks in bs->file, Paolo Bonzini, 2013/09/04
- Re: [Qemu-devel] [PATCH v5 00/21] Add qemu-img subcommand to dump file metadata, Stefan Hajnoczi, 2013/09/05