From: Eric Blake <eblake@redhat.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, jsnow@redhat.com, vsementsov@virtuozzo.com,
qemu-block@nongnu.org, Jeff Cody <jcody@redhat.com>,
Max Reitz <mreitz@redhat.com>
Subject: [Qemu-devel] [PATCH v6 13/18] mirror: Switch mirror_dirty_init() to byte-based iteration
Date: Wed, 30 Aug 2017 16:05:37 -0500 [thread overview]
Message-ID: <20170830210542.2153-14-eblake@redhat.com> (raw)
In-Reply-To: <20170830210542.2153-1-eblake@redhat.com>
Now that we have adjusted the majority of the calls this function
makes to be byte-based, it is easier to read the code if it makes
passes over the image using bytes rather than sectors.
Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
---
v6: no change
v5: rebase to earlier changes
v2-v4: no change
---
block/mirror.c | 38 ++++++++++++++------------------------
1 file changed, 14 insertions(+), 24 deletions(-)
diff --git a/block/mirror.c b/block/mirror.c
index 18172a56a3..87d9857475 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -613,15 +613,13 @@ static void mirror_throttle(MirrorBlockJob *s)
static int coroutine_fn mirror_dirty_init(MirrorBlockJob *s)
{
- int64_t sector_num, end;
+ int64_t offset;
BlockDriverState *base = s->base;
BlockDriverState *bs = s->source;
BlockDriverState *target_bs = blk_bs(s->target);
- int ret, n;
+ int ret;
int64_t count;
- end = s->bdev_length / BDRV_SECTOR_SIZE;
-
if (base == NULL && !bdrv_has_zero_init(target_bs)) {
if (!bdrv_can_write_zeroes_with_unmap(target_bs)) {
bdrv_set_dirty_bitmap(s->dirty_bitmap, 0, s->bdev_length);
@@ -629,9 +627,9 @@ static int coroutine_fn mirror_dirty_init(MirrorBlockJob *s)
}
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);
+ for (offset = 0; offset < s->bdev_length; ) {
+ int bytes = MIN(s->bdev_length - offset,
+ QEMU_ALIGN_DOWN(INT_MAX, s->granularity));
mirror_throttle(s);
@@ -647,9 +645,8 @@ static int coroutine_fn mirror_dirty_init(MirrorBlockJob *s)
continue;
}
- mirror_do_zero_or_discard(s, sector_num * BDRV_SECTOR_SIZE,
- nb_sectors * BDRV_SECTOR_SIZE, false);
- sector_num += nb_sectors;
+ mirror_do_zero_or_discard(s, offset, bytes, false);
+ offset += bytes;
}
mirror_wait_for_all_io(s);
@@ -657,10 +654,10 @@ static int coroutine_fn mirror_dirty_init(MirrorBlockJob *s)
}
/* First part, loop on the sectors and initialize the dirty bitmap. */
- for (sector_num = 0; sector_num < end; ) {
+ for (offset = 0; offset < s->bdev_length; ) {
/* Just to make sure we are not exceeding int limit. */
- int nb_sectors = MIN(INT_MAX >> BDRV_SECTOR_BITS,
- end - sector_num);
+ int bytes = MIN(s->bdev_length - offset,
+ QEMU_ALIGN_DOWN(INT_MAX, s->granularity));
mirror_throttle(s);
@@ -668,23 +665,16 @@ static int coroutine_fn mirror_dirty_init(MirrorBlockJob *s)
return 0;
}
- ret = bdrv_is_allocated_above(bs, base, sector_num * BDRV_SECTOR_SIZE,
- nb_sectors * BDRV_SECTOR_SIZE, &count);
+ ret = bdrv_is_allocated_above(bs, base, offset, bytes, &count);
if (ret < 0) {
return ret;
}
- /* TODO: Relax this once bdrv_is_allocated_above and dirty
- * bitmaps no longer require sector alignment. */
- assert(QEMU_IS_ALIGNED(count, BDRV_SECTOR_SIZE));
- n = count >> BDRV_SECTOR_BITS;
- assert(n > 0);
+ assert(count);
if (ret == 1) {
- bdrv_set_dirty_bitmap(s->dirty_bitmap,
- sector_num * BDRV_SECTOR_SIZE,
- n * BDRV_SECTOR_SIZE);
+ bdrv_set_dirty_bitmap(s->dirty_bitmap, offset, count);
}
- sector_num += n;
+ offset += count;
}
return 0;
}
--
2.13.5
next prev parent reply other threads:[~2017-08-30 21:06 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-30 21:05 [Qemu-devel] [PATCH v6 00/18] make dirty-bitmap byte-based Eric Blake
2017-08-30 21:05 ` [Qemu-devel] [PATCH v6 01/18] block: Make bdrv_img_create() size selection easier to read Eric Blake
2017-08-30 21:05 ` [Qemu-devel] [PATCH v6 02/18] hbitmap: Rename serialization_granularity to serialization_align Eric Blake
2017-08-30 21:05 ` [Qemu-devel] [PATCH v6 03/18] qcow2: Ensure bitmap serialization is aligned Eric Blake
2017-08-30 21:05 ` [Qemu-devel] [PATCH v6 04/18] dirty-bitmap: Drop unused functions Eric Blake
2017-08-30 21:05 ` [Qemu-devel] [PATCH v6 05/18] dirty-bitmap: Change bdrv_dirty_bitmap_size() to report bytes Eric Blake
2017-09-08 12:22 ` Kevin Wolf
2017-09-08 14:04 ` Eric Blake
2017-09-12 19:35 ` Eric Blake
2017-08-30 21:05 ` [Qemu-devel] [PATCH v6 06/18] dirty-bitmap: Change bdrv_dirty_bitmap_*serialize*() to take bytes Eric Blake
2017-08-30 21:05 ` [Qemu-devel] [PATCH v6 07/18] qcow2: Switch sectors_covered_by_bitmap_cluster() to byte-based Eric Blake
2017-08-30 21:05 ` [Qemu-devel] [PATCH v6 08/18] dirty-bitmap: Set iterator start by offset, not sector Eric Blake
2017-08-30 21:05 ` [Qemu-devel] [PATCH v6 09/18] dirty-bitmap: Change bdrv_dirty_iter_next() to report byte offset Eric Blake
2017-08-30 21:05 ` [Qemu-devel] [PATCH v6 10/18] dirty-bitmap: Change bdrv_get_dirty_count() to report bytes Eric Blake
2017-09-08 12:51 ` Kevin Wolf
2017-09-08 14:05 ` Eric Blake
2017-08-30 21:05 ` [Qemu-devel] [PATCH v6 11/18] dirty-bitmap: Change bdrv_get_dirty_locked() to take bytes Eric Blake
2017-08-30 21:05 ` [Qemu-devel] [PATCH v6 12/18] dirty-bitmap: Change bdrv_[re]set_dirty_bitmap() to use bytes Eric Blake
2017-08-30 21:05 ` Eric Blake [this message]
2017-08-30 21:05 ` [Qemu-devel] [PATCH v6 14/18] qcow2: Switch qcow2_measure() to byte-based iteration Eric Blake
2017-09-08 13:15 ` Kevin Wolf
2017-09-08 13:43 ` Eric Blake
2017-08-30 21:05 ` [Qemu-devel] [PATCH v6 15/18] qcow2: Switch load_bitmap_data() " Eric Blake
2017-08-30 21:05 ` [Qemu-devel] [PATCH v6 16/18] qcow2: Switch store_bitmap_data() " Eric Blake
2017-09-08 13:27 ` Kevin Wolf
2017-09-08 14:09 ` Eric Blake
2017-09-08 14:16 ` Kevin Wolf
2017-08-30 21:05 ` [Qemu-devel] [PATCH v6 17/18] dirty-bitmap: Switch bdrv_set_dirty() to bytes Eric Blake
2017-08-30 21:05 ` [Qemu-devel] [PATCH v6 18/18] dirty-bitmap: Convert internal hbitmap size/granularity Eric Blake
2017-08-30 22:43 ` [Qemu-devel] [PATCH v6 00/18] make dirty-bitmap byte-based John Snow
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170830210542.2153-14-eblake@redhat.com \
--to=eblake@redhat.com \
--cc=jcody@redhat.com \
--cc=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=vsementsov@virtuozzo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).