mirror of https://github.com/xemu-project/xemu.git
quorum: Fix child permissions
Quorum cannot share WRITE or RESIZE on its children. Presumably, it only does so because as a filter, it seemed intuitively correct to point its .bdrv_child_perm to bdrv_filter_default_perm(). However, it is not really a filter, and bdrv_filter_default_perm() does not work for it, so we have to provide a custom .bdrv_child_perm implementation. Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Message-Id: <20200218103454.296704-6-mreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
f718ca147d
commit
37a3791b38
|
@ -1114,6 +1114,23 @@ static char *quorum_dirname(BlockDriverState *bs, Error **errp)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void quorum_child_perm(BlockDriverState *bs, BdrvChild *c,
|
||||||
|
const BdrvChildRole *role,
|
||||||
|
BlockReopenQueue *reopen_queue,
|
||||||
|
uint64_t perm, uint64_t shared,
|
||||||
|
uint64_t *nperm, uint64_t *nshared)
|
||||||
|
{
|
||||||
|
*nperm = perm & DEFAULT_PERM_PASSTHROUGH;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We cannot share RESIZE or WRITE, as this would make the
|
||||||
|
* children differ from each other.
|
||||||
|
*/
|
||||||
|
*nshared = (shared & (BLK_PERM_CONSISTENT_READ |
|
||||||
|
BLK_PERM_WRITE_UNCHANGED))
|
||||||
|
| DEFAULT_PERM_UNCHANGED;
|
||||||
|
}
|
||||||
|
|
||||||
static const char *const quorum_strong_runtime_opts[] = {
|
static const char *const quorum_strong_runtime_opts[] = {
|
||||||
QUORUM_OPT_VOTE_THRESHOLD,
|
QUORUM_OPT_VOTE_THRESHOLD,
|
||||||
QUORUM_OPT_BLKVERIFY,
|
QUORUM_OPT_BLKVERIFY,
|
||||||
|
@ -1143,7 +1160,7 @@ static BlockDriver bdrv_quorum = {
|
||||||
.bdrv_add_child = quorum_add_child,
|
.bdrv_add_child = quorum_add_child,
|
||||||
.bdrv_del_child = quorum_del_child,
|
.bdrv_del_child = quorum_del_child,
|
||||||
|
|
||||||
.bdrv_child_perm = bdrv_filter_default_perms,
|
.bdrv_child_perm = quorum_child_perm,
|
||||||
|
|
||||||
.is_filter = true,
|
.is_filter = true,
|
||||||
.bdrv_recurse_is_first_non_filter = quorum_recurse_is_first_non_filter,
|
.bdrv_recurse_is_first_non_filter = quorum_recurse_is_first_non_filter,
|
||||||
|
|
Loading…
Reference in New Issue