[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 12/35] block/copy-before-write: relax permission requirements
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[PATCH v4 12/35] block/copy-before-write: relax permission requirements when no parents |
Date: |
Wed, 2 Jun 2021 16:10:45 +0300 |
We are going to publish copy-before-write filter. So, user should be
able to create it with blockdev-add first, specifying both filtered and
target children. And then do blockdev-reopen, to actually insert the
filter where needed.
Currently, filter unshares write permission unconditionally on source
node. It's good, but it will not allow to do blockdev-add. So, let's
relax restrictions when filter doesn't have any parent.
Test output is modified, as now permission conflict happens only when
job creates a blk parent for filter node.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
---
block/copy-before-write.c | 8 +++++---
tests/qemu-iotests/283.out | 2 +-
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/block/copy-before-write.c b/block/copy-before-write.c
index a7996d54db..2a51cc64e4 100644
--- a/block/copy-before-write.c
+++ b/block/copy-before-write.c
@@ -142,10 +142,12 @@ static void cbw_child_perm(BlockDriverState *bs,
BdrvChild *c,
bdrv_default_perms(bs, c, role, reopen_queue,
perm, shared, nperm, nshared);
- if (perm & BLK_PERM_WRITE) {
- *nperm = *nperm | BLK_PERM_CONSISTENT_READ;
+ if (!QLIST_EMPTY(&bs->parents)) {
+ if (perm & BLK_PERM_WRITE) {
+ *nperm = *nperm | BLK_PERM_CONSISTENT_READ;
+ }
+ *nshared &= ~(BLK_PERM_WRITE | BLK_PERM_RESIZE);
}
- *nshared &= ~(BLK_PERM_WRITE | BLK_PERM_RESIZE);
}
}
diff --git a/tests/qemu-iotests/283.out b/tests/qemu-iotests/283.out
index f2b7219632..5bb75952ef 100644
--- a/tests/qemu-iotests/283.out
+++ b/tests/qemu-iotests/283.out
@@ -5,7 +5,7 @@
{"execute": "blockdev-add", "arguments": {"driver": "blkdebug", "image":
"base", "node-name": "other", "take-child-perms": ["write"]}}
{"return": {}}
{"execute": "blockdev-backup", "arguments": {"device": "source", "sync":
"full", "target": "target"}}
-{"error": {"class": "GenericError", "desc": "Cannot append copy-before-write
filter: Permission conflict on node 'base': permissions 'write' are both
required by node 'other' (uses node 'base' as 'image' child) and unshared by
node 'source' (uses node 'base' as 'image' child)."}}
+{"error": {"class": "GenericError", "desc": "Permission conflict on node
'base': permissions 'write' are both required by node 'other' (uses node 'base'
as 'image' child) and unshared by node 'source' (uses node 'base' as 'image'
child)."}}
=== copy-before-write filter should be gone after job-finalize ===
--
2.29.2
- [PATCH v4 00/35] block: publish backup-top filter, Vladimir Sementsov-Ogievskiy, 2021/06/02
- [PATCH v4 01/35] block: rename bdrv_replace_child to bdrv_replace_child_tran, Vladimir Sementsov-Ogievskiy, 2021/06/02
- [PATCH v4 02/35] block: comment graph-modifying function not updating permissions, Vladimir Sementsov-Ogievskiy, 2021/06/02
- [PATCH v4 04/35] block: introduce blk_replace_bs, Vladimir Sementsov-Ogievskiy, 2021/06/02
- [PATCH v4 05/35] qdev-properties: PropertyInfo: add realized_set_allowed field, Vladimir Sementsov-Ogievskiy, 2021/06/02
- [PATCH v4 12/35] block/copy-before-write: relax permission requirements when no parents,
Vladimir Sementsov-Ogievskiy <=
- [PATCH v4 06/35] qdev: allow setting drive property for realized device, Vladimir Sementsov-Ogievskiy, 2021/06/02
- [PATCH v4 03/35] block: introduce bdrv_replace_child_bs(), Vladimir Sementsov-Ogievskiy, 2021/06/02
- [PATCH v4 07/35] block: rename backup-top to copy-before-write, Vladimir Sementsov-Ogievskiy, 2021/06/02
- [PATCH v4 14/35] block/copy-before-write: use file child instead of backing, Vladimir Sementsov-Ogievskiy, 2021/06/02
- [PATCH v4 13/35] block/copy-before-write: drop extra bdrv_unref on failure path, Vladimir Sementsov-Ogievskiy, 2021/06/02
- [PATCH v4 08/35] block-copy: always set BDRV_REQ_SERIALISING flag, Vladimir Sementsov-Ogievskiy, 2021/06/02
- [PATCH v4 15/35] block/copy-before-write: bdrv_cbw_append(): replace child at last, Vladimir Sementsov-Ogievskiy, 2021/06/02
- [PATCH v4 16/35] block/copy-before-write: introduce cbw_init(), Vladimir Sementsov-Ogievskiy, 2021/06/02
- [PATCH v4 09/35] block/block-copy: introduce block_copy_set_copy_opts(), Vladimir Sementsov-Ogievskiy, 2021/06/02
- [PATCH v4 17/35] block/copy-before-write: cbw_init(): rename variables, Vladimir Sementsov-Ogievskiy, 2021/06/02