On 07/07/2016 05:35 AM, Denis V. Lunev wrote: > There is no need to scan allocation tables if we have mark_all_dirty flag > set. Just mark it all dirty. > > Signed-off-by: Denis V. Lunev <[email protected]> > Reviewed-by: Vladimir Sementsov-Ogievskiy<[email protected]> > CC: Stefan Hajnoczi <[email protected]> > CC: Fam Zheng <[email protected]> > CC: Kevin Wolf <[email protected]> > CC: Max Reitz <[email protected]> > CC: Jeff Cody <[email protected]> > CC: Eric Blake <[email protected]> > --- > block/mirror.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/block/mirror.c b/block/mirror.c > index 9beda4b..7208023 100644 > --- a/block/mirror.c > +++ b/block/mirror.c > @@ -518,7 +518,6 @@ static int mirror_dirty_init(MirrorBlockJob *s) > BlockDriverState *base = s->base; > BlockDriverState *bs = blk_bs(s->common.blk); > BlockDriverState *target_bs = blk_bs(s->target); > - bool mark_all_dirty = base == NULL && !bdrv_has_zero_init(target_bs); > uint64_t last_pause_ns; > int ret, n; > > @@ -526,6 +525,11 @@ static int mirror_dirty_init(MirrorBlockJob *s) > > last_pause_ns = qemu_clock_get_ns(QEMU_CLOCK_REALTIME); > > + if (base == NULL && !bdrv_has_zero_init(target_bs)) { > + bdrv_set_dirty_bitmap(s->dirty_bitmap, 0, end); > + return 0; > + } > + > /* First part, loop on the sectors and initialize the dirty bitmap. */ > for (sector_num = 0; sector_num < end; ) { > /* Just to make sure we are not exceeding int limit. */ > @@ -550,7 +554,7 @@ static int mirror_dirty_init(MirrorBlockJob *s) > } > > assert(n > 0); > - if (ret == 1 || mark_all_dirty) { > + if (ret == 1) { > bdrv_set_dirty_bitmap(s->dirty_bitmap, sector_num, n); > } > sector_num += n; >
Reviewed-by: John Snow <[email protected]>
