[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 27/42] qemu-img: always probe the input image for all
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PULL 27/42] qemu-img: always probe the input image for allocated sectors |
Date: |
Fri, 6 Sep 2013 17:38:58 +0200 |
From: Paolo Bonzini <address@hidden>
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>
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
qemu-img.c | 40 +++++++++++++++++++---------------------
1 file changed, 19 insertions(+), 21 deletions(-)
diff --git a/qemu-img.c b/qemu-img.c
index 27cc006..5cc579d 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -1502,28 +1502,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] [PULL 06/42] qemu-iotests: Adjust test result 039, (continued)
- [Qemu-devel] [PULL 06/42] qemu-iotests: Adjust test result 039, Stefan Hajnoczi, 2013/09/06
- [Qemu-devel] [PULL 08/42] w32: Fix access to host devices (regression), Stefan Hajnoczi, 2013/09/06
- [Qemu-devel] [PULL 07/42] add qemu-img convert -n option (skip target volume creation), Stefan Hajnoczi, 2013/09/06
- [Qemu-devel] [PULL 10/42] vvfat: use bdrv_new() to allocate BlockDriverState, Stefan Hajnoczi, 2013/09/06
- [Qemu-devel] [PULL 09/42] aio / timers: fix build of test/test-aio.c on non-linux platforms, Stefan Hajnoczi, 2013/09/06
- [Qemu-devel] [PULL 11/42] iscsi: use bdrv_new() instead of stack structure, Stefan Hajnoczi, 2013/09/06
- [Qemu-devel] [PULL 12/42] block: implement reference count for BlockDriverState, Stefan Hajnoczi, 2013/09/06
- [Qemu-devel] [PULL 13/42] block: make bdrv_delete() static, Stefan Hajnoczi, 2013/09/06
- [Qemu-devel] [PULL 14/42] migration: omit drive ref as we have bdrv_ref now, Stefan Hajnoczi, 2013/09/06
- [Qemu-devel] [PULL 15/42] xen_disk: simplify blk_disconnect with refcnt, Stefan Hajnoczi, 2013/09/06
- [Qemu-devel] [PULL 27/42] qemu-img: always probe the input image for allocated sectors,
Stefan Hajnoczi <=
- [Qemu-devel] [PULL 28/42] block: make bdrv_has_zero_init return false for copy-on-write-images, Stefan Hajnoczi, 2013/09/06
- [Qemu-devel] [PULL 29/42] block: introduce bdrv_get_block_status API, Stefan Hajnoczi, 2013/09/06
- [Qemu-devel] [PULL 31/42] block: return get_block_status data and flags for formats, Stefan Hajnoczi, 2013/09/06
- [Qemu-devel] [PULL 30/42] block: define get_block_status return value, Stefan Hajnoczi, 2013/09/06
- [Qemu-devel] [PULL 32/42] block: use bdrv_has_zero_init to return BDRV_BLOCK_ZERO, Stefan Hajnoczi, 2013/09/06
- [Qemu-devel] [PULL 33/42] block: return BDRV_BLOCK_ZERO past end of backing file, Stefan Hajnoczi, 2013/09/06