diff options
author | Kevin Wolf <kwolf@redhat.com> | 2017-04-04 17:29:03 +0200 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2017-04-07 14:44:05 +0200 |
commit | d35ff5e6b3aa3a706b0aa3bcf11400fac945b67a (patch) | |
tree | 69d406988e6ff392367c8703c331003257d5c76a /include | |
parent | 5fe2339e6b09da7d6f48b9bef0f1a7360392b489 (diff) |
block: Ignore guest dev permissions during incoming migration
Usually guest devices don't like other writers to the same image, so
they use blk_set_perm() to prevent this from happening. In the migration
phase before the VM is actually running, though, they don't have a
problem with writes to the image. On the other hand, storage migration
needs to be able to write to the image in this phase, so the restrictive
blk_set_perm() call of qdev devices breaks it.
This patch flags all BlockBackends with a qdev device as
blk->disable_perm during incoming migration, which means that the
requested permissions are stored in the BlockBackend, but not actually
applied to its root node yet.
Once migration has finished and the VM should be resumed, the
permissions are applied. If they cannot be applied (e.g. because the NBD
server used for block migration hasn't been shut down), resuming the VM
fails.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Tested-by: Kashyap Chamarthy <kchamart@redhat.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/block/block.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/include/block/block.h b/include/block/block.h index 5149260827..3e09222f5f 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -366,6 +366,8 @@ void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp); void bdrv_invalidate_cache_all(Error **errp); int bdrv_inactivate_all(void); +void blk_resume_after_migration(Error **errp); + /* Ensure contents are flushed to disk. */ int bdrv_flush(BlockDriverState *bs); int coroutine_fn bdrv_co_flush(BlockDriverState *bs); |