Skip to content

Commit

Permalink
block migration: do not submit multiple AIOs for same sector (v2)
Browse files Browse the repository at this point in the history
An old version of this patch was applied to master, so this contains the
differences between v1 and v2.

Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
  • Loading branch information
matosatti authored and kevmw committed Nov 24, 2010
1 parent 9063f81 commit 62155e2
Showing 1 changed file with 5 additions and 9 deletions.
14 changes: 5 additions & 9 deletions block-migration.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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;
}
Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit 62155e2

Please sign in to comment.