[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 12/35] block/copy-before-write: relax permission requirements
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[PATCH v3 12/35] block/copy-before-write: relax permission requirements when no parents |
Date: |
Tue, 1 Jun 2021 19:50:03 +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
- [PATCH v3 04/35] block: introduce blk_replace_bs, (continued)
- [PATCH v3 04/35] block: introduce blk_replace_bs, Vladimir Sementsov-Ogievskiy, 2021/06/01
- [PATCH v3 10/35] block/backup: set copy_range and compress after filter insertion, Vladimir Sementsov-Ogievskiy, 2021/06/01
- [PATCH v3 05/35] qdev-properties: PropertyInfo: add realized_set_allowed field, Vladimir Sementsov-Ogievskiy, 2021/06/01
- [PATCH v3 06/35] qdev: allow setting drive property for realized device, Vladimir Sementsov-Ogievskiy, 2021/06/01
- [PATCH v3 07/35] block: rename backup-top to copy-before-write, Vladimir Sementsov-Ogievskiy, 2021/06/01
- [PATCH v3 11/35] block/backup: move cluster size calculation to block-copy, Vladimir Sementsov-Ogievskiy, 2021/06/01
- [PATCH v3 08/35] block-copy: always set BDRV_REQ_SERIALISING flag, Vladimir Sementsov-Ogievskiy, 2021/06/01
- [PATCH v3 14/35] block/copy-before-write: use file child instead of backing, Vladimir Sementsov-Ogievskiy, 2021/06/01
- [PATCH v3 13/35] block/copy-before-write: drop extra bdrv_unref on failure path, Vladimir Sementsov-Ogievskiy, 2021/06/01
- [PATCH v3 15/35] block/copy-before-write: bdrv_cbw_append(): replace child at last, Vladimir Sementsov-Ogievskiy, 2021/06/01
- [PATCH v3 12/35] block/copy-before-write: relax permission requirements when no parents,
Vladimir Sementsov-Ogievskiy <=
- [PATCH v3 16/35] block/copy-before-write: introduce cbw_init(), Vladimir Sementsov-Ogievskiy, 2021/06/01
- [PATCH v3 17/35] block/copy-before-write: cbw_init(): rename variables, Vladimir Sementsov-Ogievskiy, 2021/06/01
- [PATCH v3 19/35] block/copy-before-write: bdrv_cbw_append(): drop unused compress arg, Vladimir Sementsov-Ogievskiy, 2021/06/01
- [PATCH v3 18/35] block/copy-before-write: cbw_init(): use file child after attaching, Vladimir Sementsov-Ogievskiy, 2021/06/01
- [PATCH v3 21/35] block/copy-before-write: initialize block-copy bitmap, Vladimir Sementsov-Ogievskiy, 2021/06/01
- [PATCH v3 20/35] block/copy-before-write: cbw_init(): use options, Vladimir Sementsov-Ogievskiy, 2021/06/01
- [PATCH v3 22/35] block/block-copy: make setting progress optional, Vladimir Sementsov-Ogievskiy, 2021/06/01
- [PATCH v3 28/35] iotests/222: fix pylint and mypy complains, Vladimir Sementsov-Ogievskiy, 2021/06/01
- [PATCH v3 23/35] block/copy-before-write: make public block driver, Vladimir Sementsov-Ogievskiy, 2021/06/01
- [PATCH v3 24/35] qapi: publish copy-before-write filter, Vladimir Sementsov-Ogievskiy, 2021/06/01