[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 11/33] block/copy-before-write: relax permission requirements
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[PATCH v2 11/33] block/copy-before-write: relax permission requirements when no parents |
Date: |
Thu, 20 May 2021 17:21:43 +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 e08f807dab..d5350ce7a7 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: Conflicts with use by source as 'image', which does not allow 'write'
on base"}}
+{"error": {"class": "GenericError", "desc": "Conflicts with use by source as
'image', which does not allow 'write' on base"}}
=== copy-before-write filter should be gone after job-finalize ===
--
2.29.2
- Re: [PATCH v2 05/33] qdev-properties: PropertyInfo: add realized_set_allowed field, (continued)
- [PATCH v2 04/33] block: introduce blk_replace_bs, Vladimir Sementsov-Ogievskiy, 2021/05/20
- [PATCH v2 06/33] qdev: allow setting drive property for realized device, Vladimir Sementsov-Ogievskiy, 2021/05/20
- [PATCH v2 10/33] block/backup: move cluster size calculation to block-copy, Vladimir Sementsov-Ogievskiy, 2021/05/20
- [PATCH v2 07/33] block: rename backup-top to copy-before-write, Vladimir Sementsov-Ogievskiy, 2021/05/20
- [PATCH v2 09/33] block-copy: always set BDRV_REQ_SERIALISING flag, Vladimir Sementsov-Ogievskiy, 2021/05/20
- [PATCH v2 08/33] block/backup: drop support for copy_range, Vladimir Sementsov-Ogievskiy, 2021/05/20
- [PATCH v2 11/33] block/copy-before-write: relax permission requirements when no parents,
Vladimir Sementsov-Ogievskiy <=
- [PATCH v2 12/33] block/copy-before-write: drop extra bdrv_unref on failure path, Vladimir Sementsov-Ogievskiy, 2021/05/20
- [PATCH v2 13/33] block/copy-before-write: use file child instead of backing, Vladimir Sementsov-Ogievskiy, 2021/05/20
- [PATCH v2 23/33] python/qemu/machine.py: refactor _qemu_args(), Vladimir Sementsov-Ogievskiy, 2021/05/20
- [PATCH v2 28/33] iotests: move 222 to tests/image-fleecing, Vladimir Sementsov-Ogievskiy, 2021/05/20
- [PATCH v2 14/33] block/copy-before-write: bdrv_cbw_append(): replace child at last, Vladimir Sementsov-Ogievskiy, 2021/05/20
- [PATCH v2 15/33] block/copy-before-write: introduce cbw_init(), Vladimir Sementsov-Ogievskiy, 2021/05/20