summaryrefslogtreecommitdiffstats
path: root/block.c
diff options
context:
space:
mode:
authorMax Reitz2019-07-03 19:28:02 +0200
committerMax Reitz2019-07-15 15:48:40 +0200
commite5182c1c57ac9aa0e9c399b9c60af3c41cff35b4 (patch)
tree04e54401d154ee49cc0c0855dccef3a9413b04c8 /block.c
parentnvme: Set number of queues later in nvme_init() (diff)
downloadqemu-e5182c1c57ac9aa0e9c399b9c60af3c41cff35b4.tar.gz
qemu-e5182c1c57ac9aa0e9c399b9c60af3c41cff35b4.tar.xz
qemu-e5182c1c57ac9aa0e9c399b9c60af3c41cff35b4.zip
block: Add BDS.never_freeze
The commit and the mirror block job must be able to drop their filter node at any point. However, this will not be possible if any of the BdrvChild links to them is frozen. Therefore, we need to prevent them from ever becoming frozen. Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com> Reviewed-by: Alberto Garcia <berto@igalia.com> Message-id: 20190703172813.6868-2-mreitz@redhat.com Signed-off-by: Max Reitz <mreitz@redhat.com>
Diffstat (limited to 'block.c')
-rw-r--r--block.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/block.c b/block.c
index c139540f2b..6565192b91 100644
--- a/block.c
+++ b/block.c
@@ -4417,6 +4417,14 @@ int bdrv_freeze_backing_chain(BlockDriverState *bs, BlockDriverState *base,
}
for (i = bs; i != base; i = backing_bs(i)) {
+ if (i->backing && backing_bs(i)->never_freeze) {
+ error_setg(errp, "Cannot freeze '%s' link to '%s'",
+ i->backing->name, backing_bs(i)->node_name);
+ return -EPERM;
+ }
+ }
+
+ for (i = bs; i != base; i = backing_bs(i)) {
if (i->backing) {
i->backing->frozen = true;
}