|
@@ -146,8 +146,7 @@ static int bmds_aio_inflight(BlkMigDevState *bmds, int64_t sector)
|
|
|
{
|
|
|
int64_t chunk = sector / (int64_t)BDRV_SECTORS_PER_DIRTY_CHUNK;
|
|
|
|
|
|
- if (bmds->aio_bitmap &&
|
|
|
- (sector << BDRV_SECTOR_BITS) < bdrv_getlength(bmds->bs)) {
|
|
|
+ if ((sector << BDRV_SECTOR_BITS) < bdrv_getlength(bmds->bs)) {
|
|
|
return !!(bmds->aio_bitmap[chunk / (sizeof(unsigned long) * 8)] &
|
|
|
(1UL << (chunk % (sizeof(unsigned long) * 8))));
|
|
|
} else {
|
|
@@ -169,13 +168,9 @@ static void bmds_set_aio_inflight(BlkMigDevState *bmds, int64_t sector_num,
|
|
|
bit = start % (sizeof(unsigned long) * 8);
|
|
|
val = bmds->aio_bitmap[idx];
|
|
|
if (set) {
|
|
|
- if (!(val & (1UL << bit))) {
|
|
|
- val |= 1UL << bit;
|
|
|
- }
|
|
|
+ val |= 1UL << bit;
|
|
|
} else {
|
|
|
- if (val & (1UL << bit)) {
|
|
|
- val &= ~(1UL << bit);
|
|
|
- }
|
|
|
+ val &= ~(1UL << bit);
|
|
|
}
|
|
|
bmds->aio_bitmap[idx] = val;
|
|
|
}
|
|
@@ -385,8 +380,9 @@ static int mig_save_device_dirty(Monitor *mon, QEMUFile *f,
|
|
|
int nr_sectors;
|
|
|
|
|
|
for (sector = bmds->cur_dirty; sector < bmds->total_sectors;) {
|
|
|
- if (bmds_aio_inflight(bmds, sector))
|
|
|
+ if (bmds_aio_inflight(bmds, sector)) {
|
|
|
qemu_aio_flush();
|
|
|
+ }
|
|
|
if (bdrv_get_dirty(bmds->bs, sector)) {
|
|
|
|
|
|
if (total_sectors - sector < BDRV_SECTORS_PER_DIRTY_CHUNK) {
|