diff options
author | Max Reitz <mreitz@redhat.com> | 2019-07-03 19:28:02 +0200 |
---|---|---|
committer | Max Reitz <mreitz@redhat.com> | 2019-07-15 15:48:40 +0200 |
commit | e5182c1c57ac9aa0e9c399b9c60af3c41cff35b4 (patch) | |
tree | 04e54401d154ee49cc0c0855dccef3a9413b04c8 /block.c | |
parent | 95667c3be0c9f5fc62f58fe845879250f63f7d32 (diff) |
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.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -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; } |