The way bitmap backups work is by starting at 75% if it needs to copy just 25% of the disk.
The way sync=top currently works, however, is to start at 0% and then never update the progress if it doesn't copy a region. If it needs to copy 25% of the disk, we'll finish at 25%. Update the progress when we skip regions. Signed-off-by: John Snow <js...@redhat.com> --- block/backup.c | 1 + 1 file changed, 1 insertion(+) diff --git a/block/backup.c b/block/backup.c index a64b768e24..38c4a688c6 100644 --- a/block/backup.c +++ b/block/backup.c @@ -417,6 +417,7 @@ static int coroutine_fn backup_loop(BackupBlockJob *job) if (job->sync_mode == MIRROR_SYNC_MODE_TOP && bdrv_is_unallocated_range(bs, offset, job->cluster_size)) { + job_progress_update(&job->common.job, job->cluster_size); bdrv_reset_dirty_bitmap(job->copy_bitmap, offset, job->cluster_size); continue; -- 2.21.0