This patch will allow to do a post incoming live migration check on QED images and keep invalidating caches on qcow2 images.
Signed-off-by: Benoit Canet <benoit.ca...@gmail.com> --- block.c | 10 +++++----- block.h | 8 +++++--- block/qcow2.c | 7 ++++++- block_int.h | 4 ++-- migration.c | 6 ++++-- 5 files changed, 22 insertions(+), 13 deletions(-) diff --git a/block.c b/block.c index 889d464..b0f0288 100644 --- a/block.c +++ b/block.c @@ -3566,19 +3566,19 @@ int coroutine_fn bdrv_co_flush(BlockDriverState *bs) } } -void bdrv_invalidate_cache(BlockDriverState *bs) +void bdrv_post_incoming_migration(BlockDriverState *bs) { - if (bs->drv && bs->drv->bdrv_invalidate_cache) { - bs->drv->bdrv_invalidate_cache(bs); + if (bs->drv && bs->drv->bdrv_post_incoming_migration) { + bs->drv->bdrv_post_incoming_migration(bs); } } -void bdrv_invalidate_cache_all(void) +void bdrv_post_incoming_migration_all(void) { BlockDriverState *bs; QTAILQ_FOREACH(bs, &bdrv_states, list) { - bdrv_invalidate_cache(bs); + bdrv_post_incoming_migration(bs); } } diff --git a/block.h b/block.h index 2ddf9c5..1323086 100644 --- a/block.h +++ b/block.h @@ -219,9 +219,11 @@ BlockDriverAIOCB *bdrv_aio_ioctl(BlockDriverState *bs, unsigned long int req, void *buf, BlockDriverCompletionFunc *cb, void *opaque); -/* Invalidate any cached metadata used by image formats */ -void bdrv_invalidate_cache(BlockDriverState *bs); -void bdrv_invalidate_cache_all(void); +/* Do post incoming migration operations + * Ex: flush mutable metadata + */ +void bdrv_post_incoming_migration(BlockDriverState *bs); +void bdrv_post_incoming_migration_all(void); void bdrv_set_incoming_migration(void); void bdrv_clear_incoming_migration_all(void); diff --git a/block/qcow2.c b/block/qcow2.c index eb5ea48..bbe6032 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -700,6 +700,11 @@ static void qcow2_invalidate_cache(BlockDriverState *bs) } } +static void qcow2_post_incoming_migration(BlockDriverState *bs) +{ + qcow2_invalidate_cache(bs); +} + static size_t header_ext_add(char *buf, uint32_t magic, const void *s, size_t len, size_t buflen) { @@ -1383,7 +1388,7 @@ static BlockDriver bdrv_qcow2 = { .bdrv_change_backing_file = qcow2_change_backing_file, - .bdrv_invalidate_cache = qcow2_invalidate_cache, + .bdrv_post_incoming_migration = qcow2_post_incoming_migration, .create_options = qcow2_create_options, .bdrv_check = qcow2_check, diff --git a/block_int.h b/block_int.h index b460c36..e68d42e 100644 --- a/block_int.h +++ b/block_int.h @@ -145,9 +145,9 @@ struct BlockDriver { int64_t sector_num, int nb_sectors, int *pnum); /* - * Invalidate any cached meta-data. + * Do the post incoming migration processing */ - void (*bdrv_invalidate_cache)(BlockDriverState *bs); + void (*bdrv_post_incoming_migration)(BlockDriverState *bs); /* * Flushes all data that was already written to the OS all the way down to diff --git a/migration.c b/migration.c index 00fa1e3..45af364 100644 --- a/migration.c +++ b/migration.c @@ -91,8 +91,10 @@ void process_incoming_migration(QEMUFile *f) qemu_announce_self(); DPRINTF("successfully loaded vm state\n"); - /* Make sure all file formats flush their mutable metadata */ - bdrv_invalidate_cache_all(); + /* Execute post incoming migration operations : + * for qcow2 make sure to flush mutable metadata + **/ + bdrv_post_incoming_migration_all(); if (autostart) { vm_start(); -- 1.7.7.6