aboutsummaryrefslogtreecommitdiff
path: root/block.c
diff options
context:
space:
mode:
authorKevin Wolf <kwolf@redhat.com>2017-05-04 18:52:37 +0200
committerKevin Wolf <kwolf@redhat.com>2017-05-11 12:08:24 +0200
commit4417ab7adf1613799054be5afedf810fc2524ee8 (patch)
tree07b0be1c2077c7eecddab8e36fe4af21140b43d7 /block.c
parentace21a58751824f9a3d399e332317233e880de3a (diff)
block: New BdrvChildRole.activate() for blk_resume_after_migration()
Instead of manually calling blk_resume_after_migration() in migration code after doing bdrv_invalidate_cache_all(), integrate the BlockBackend activation with cache invalidation into a single function. This is achieved with a new callback in BdrvChildRole that is called by bdrv_invalidate_cache_all(). Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
Diffstat (limited to 'block.c')
-rw-r--r--block.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/block.c b/block.c
index 1e00e313c3..c8e6de29f0 100644
--- a/block.c
+++ b/block.c
@@ -3949,7 +3949,7 @@ void bdrv_init_with_whitelist(void)
void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp)
{
- BdrvChild *child;
+ BdrvChild *child, *parent;
Error *local_err = NULL;
int ret;
@@ -3985,6 +3985,16 @@ void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp)
error_setg_errno(errp, -ret, "Could not refresh total sector count");
return;
}
+
+ QLIST_FOREACH(parent, &bs->parents, next_parent) {
+ if (parent->role->activate) {
+ parent->role->activate(parent, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ }
+ }
+ }
}
void bdrv_invalidate_cache_all(Error **errp)