> @@ -317,7 +321,21 @@ static void coroutine_fn backup_run(void *opaque) > if (alloced == 0) { > continue; > } > + } else if (job->sync_mode == MIRROR_SYNC_MODE_DIRTY_BITMAP) { > + int i, dirty = 0; > + for (i = 0; i < BACKUP_SECTORS_PER_CLUSTER; > + i += job->sync_bitmap_gran) { > + if (bdrv_get_dirty(bs, job->sync_bitmap, > + start * BACKUP_SECTORS_PER_CLUSTER + i)) { > + dirty = 1; > + break; > + } > + } > + if (!dirty) { > + continue; > + } > } > + With such solution we don't use the power of HBitmap, which provides "hbitmap_iter_skip_words", with O(log(n)) complexity. Here we look through the whole bitmap (O(n)), instead of jumping to the next dirty bit. -- С уважением, Владимир