[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PULL 8/9] mirror: do not increase offset during initial ze
From: |
Jeff Cody |
Subject: |
[Qemu-block] [PULL 8/9] mirror: do not increase offset during initial zero_or_discard phase |
Date: |
Tue, 21 Feb 2017 10:40:56 -0500 |
From: Anton Nefedov <address@hidden>
If explicit zeroing out before mirroring is required for the target image,
it moves the block job offset counter to EOF, then offset and len counters
count the image size twice. There is no harm but stats are confusing,
specifically the progress of the operation is always reported as 99% by
management tools.
The patch skips offset increase for the first "technical" pass over the
image. This should not cause any further harm.
Signed-off-by: Anton Nefedov <address@hidden>
Signed-off-by: Denis V. Lunev <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Stefan Hajnoczi <address@hidden>
Message-id: address@hidden
CC: Jeff Cody <address@hidden>
CC: Kevin Wolf <address@hidden>
CC: Max Reitz <address@hidden>
CC: Eric Blake <address@hidden>
Signed-off-by: Jeff Cody <address@hidden>
---
block/mirror.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/block/mirror.c b/block/mirror.c
index 698a54e..ca8547b 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -69,6 +69,7 @@ typedef struct MirrorBlockJob {
bool waiting_for_io;
int target_cluster_sectors;
int max_iov;
+ bool initial_zeroing_ongoing;
} MirrorBlockJob;
typedef struct MirrorOp {
@@ -117,9 +118,10 @@ static void mirror_iteration_done(MirrorOp *op, int ret)
if (s->cow_bitmap) {
bitmap_set(s->cow_bitmap, chunk_num, nb_chunks);
}
- s->common.offset += (uint64_t)op->nb_sectors * BDRV_SECTOR_SIZE;
+ if (!s->initial_zeroing_ongoing) {
+ s->common.offset += (uint64_t)op->nb_sectors * BDRV_SECTOR_SIZE;
+ }
}
-
qemu_iovec_destroy(&op->qiov);
g_free(op);
@@ -572,6 +574,7 @@ static int coroutine_fn mirror_dirty_init(MirrorBlockJob *s)
return 0;
}
+ s->initial_zeroing_ongoing = true;
for (sector_num = 0; sector_num < end; ) {
int nb_sectors = MIN(end - sector_num,
QEMU_ALIGN_DOWN(INT_MAX, s->granularity) >> BDRV_SECTOR_BITS);
@@ -579,6 +582,7 @@ static int coroutine_fn mirror_dirty_init(MirrorBlockJob *s)
mirror_throttle(s);
if (block_job_is_cancelled(&s->common)) {
+ s->initial_zeroing_ongoing = false;
return 0;
}
@@ -593,6 +597,7 @@ static int coroutine_fn mirror_dirty_init(MirrorBlockJob *s)
}
mirror_wait_for_all_io(s);
+ s->initial_zeroing_ongoing = false;
}
/* First part, loop on the sectors and initialize the dirty bitmap. */
--
2.9.3
- [Qemu-block] [PULL 0/9] Block patches, Jeff Cody, 2017/02/21
- [Qemu-block] [PULL 5/9] iscsi: Add timeout option, Jeff Cody, 2017/02/21
- [Qemu-block] [PULL 2/9] iscsi: Handle -iscsi user/password in bdrv_parse_filename(), Jeff Cody, 2017/02/21
- [Qemu-block] [PULL 3/9] iscsi: Add initiator-name option, Jeff Cody, 2017/02/21
- [Qemu-block] [PULL 1/9] iscsi: Split URL into individual options, Jeff Cody, 2017/02/21
- [Qemu-block] [PULL 4/9] iscsi: Add header-digest option, Jeff Cody, 2017/02/21
- [Qemu-block] [PULL 7/9] QAPI: Fix blockdev-add example documentation, Jeff Cody, 2017/02/21
- [Qemu-block] [PULL 6/9] iscsi: Add blockdev-add support, Jeff Cody, 2017/02/21
- [Qemu-block] [PULL 9/9] qemu-options: Fix broken sheepdog URL, Jeff Cody, 2017/02/21
- [Qemu-block] [PULL 8/9] mirror: do not increase offset during initial zero_or_discard phase,
Jeff Cody <=
- Re: [Qemu-block] [PULL 0/9] Block patches, Peter Maydell, 2017/02/21