BDRV_SECTORS_PER_DIRTY_CHUNK * 8 - 1;
bitmap_size /= BDRV_SECTORS_PER_DIRTY_CHUNK * 8;
- bmds->aio_bitmap = qemu_mallocz(bitmap_size);
+ bmds->aio_bitmap = g_malloc0(bitmap_size);
}
static void blk_mig_read_cb(void *opaque, int ret)
nr_sectors = total_sectors - cur_sector;
}
- blk = qemu_malloc(sizeof(BlkMigBlock));
- blk->buf = qemu_malloc(BLOCK_SIZE);
+ blk = g_malloc(sizeof(BlkMigBlock));
+ blk->buf = g_malloc(BLOCK_SIZE);
blk->bmds = bmds;
blk->sector = cur_sector;
blk->nr_sectors = nr_sectors;
error:
monitor_printf(mon, "Error reading sector %" PRId64 "\n", cur_sector);
- qemu_file_set_error(f);
- qemu_free(blk->buf);
- qemu_free(blk);
+ qemu_file_set_error(f, -EIO);
+ g_free(blk->buf);
+ g_free(blk);
return 0;
}
return;
}
- bmds = qemu_mallocz(sizeof(BlkMigDevState));
+ bmds = g_malloc0(sizeof(BlkMigDevState));
bmds->bs = bs;
bmds->bulk_completed = 0;
bmds->total_sectors = sectors;
int64_t total_sectors = bmds->total_sectors;
int64_t sector;
int nr_sectors;
+ int ret = -EIO;
for (sector = bmds->cur_dirty; sector < bmds->total_sectors;) {
if (bmds_aio_inflight(bmds, sector)) {
} else {
nr_sectors = BDRV_SECTORS_PER_DIRTY_CHUNK;
}
- blk = qemu_malloc(sizeof(BlkMigBlock));
- blk->buf = qemu_malloc(BLOCK_SIZE);
+ blk = g_malloc(sizeof(BlkMigBlock));
+ blk->buf = g_malloc(BLOCK_SIZE);
blk->bmds = bmds;
blk->sector = sector;
blk->nr_sectors = nr_sectors;
block_mig_state.submitted++;
bmds_set_aio_inflight(bmds, sector, nr_sectors, 1);
} else {
- if (bdrv_read(bmds->bs, sector, blk->buf,
- nr_sectors) < 0) {
+ ret = bdrv_read(bmds->bs, sector, blk->buf, nr_sectors);
+ if (ret < 0) {
goto error;
}
blk_send(f, blk);
- qemu_free(blk->buf);
- qemu_free(blk);
+ g_free(blk->buf);
+ g_free(blk);
}
bdrv_reset_dirty(bmds->bs, sector, nr_sectors);
error:
monitor_printf(mon, "Error reading sector %" PRId64 "\n", sector);
- qemu_file_set_error(f);
- qemu_free(blk->buf);
- qemu_free(blk);
+ qemu_file_set_error(f, ret);
+ g_free(blk->buf);
+ g_free(blk);
return 0;
}
break;
}
if (blk->ret < 0) {
- qemu_file_set_error(f);
+ qemu_file_set_error(f, blk->ret);
break;
}
blk_send(f, blk);
QSIMPLEQ_REMOVE_HEAD(&block_mig_state.blk_list, entry);
- qemu_free(blk->buf);
- qemu_free(blk);
+ g_free(blk->buf);
+ g_free(blk);
block_mig_state.read_done--;
block_mig_state.transferred++;
if ((remaining_dirty / bwidth) <=
migrate_max_downtime()) {
- /* finish stage2 because we think that we can finish remaing work
+ /* finish stage2 because we think that we can finish remaining work
below max_downtime */
return 1;
QSIMPLEQ_REMOVE_HEAD(&block_mig_state.bmds_list, entry);
bdrv_set_in_use(bmds->bs, 0);
drive_put_ref(drive_get_by_blockdev(bmds->bs));
- qemu_free(bmds->aio_bitmap);
- qemu_free(bmds);
+ g_free(bmds->aio_bitmap);
+ g_free(bmds);
}
while ((blk = QSIMPLEQ_FIRST(&block_mig_state.blk_list)) != NULL) {
QSIMPLEQ_REMOVE_HEAD(&block_mig_state.blk_list, entry);
- qemu_free(blk->buf);
- qemu_free(blk);
+ g_free(blk->buf);
+ g_free(blk);
}
monitor_printf(mon, "\n");
static int block_save_live(Monitor *mon, QEMUFile *f, int stage, void *opaque)
{
+ int ret;
+
DPRINTF("Enter save live stage %d submitted %d transferred %d\n",
stage, block_mig_state.submitted, block_mig_state.transferred);
flush_blks(f);
- if (qemu_file_has_error(f)) {
+ ret = qemu_file_get_error(f);
+ if (ret) {
blk_mig_cleanup(mon);
- return 0;
+ return ret;
}
blk_mig_reset_dirty_cursor();
flush_blks(f);
- if (qemu_file_has_error(f)) {
+ ret = qemu_file_get_error(f);
+ if (ret) {
blk_mig_cleanup(mon);
- return 0;
+ return ret;
}
}
/* report completion */
qemu_put_be64(f, (100 << BDRV_SECTOR_BITS) | BLK_MIG_FLAG_PROGRESS);
- if (qemu_file_has_error(f)) {
- return 0;
+ ret = qemu_file_get_error(f);
+ if (ret) {
+ return ret;
}
monitor_printf(mon, "Block migration completed\n");
uint8_t *buf;
int64_t total_sectors = 0;
int nr_sectors;
+ int ret;
do {
addr = qemu_get_be64(f);
addr >>= BDRV_SECTOR_BITS;
if (flags & BLK_MIG_FLAG_DEVICE_BLOCK) {
- int ret;
/* get device name */
len = qemu_get_byte(f);
qemu_get_buffer(f, (uint8_t *)device_name, len);
nr_sectors = BDRV_SECTORS_PER_DIRTY_CHUNK;
}
- buf = qemu_malloc(BLOCK_SIZE);
+ buf = g_malloc(BLOCK_SIZE);
qemu_get_buffer(f, buf, BLOCK_SIZE);
ret = bdrv_write(bs, addr, buf, nr_sectors);
- qemu_free(buf);
+ g_free(buf);
if (ret < 0) {
return ret;
}
fprintf(stderr, "Unknown flags\n");
return -EINVAL;
}
- if (qemu_file_has_error(f)) {
- return -EIO;
+ ret = qemu_file_get_error(f);
+ if (ret != 0) {
+ return ret;
}
} while (!(flags & BLK_MIG_FLAG_EOS));