[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 09/22] quorum: Add QuorumChild.to_be_replaced
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
Re: [PATCH 09/22] quorum: Add QuorumChild.to_be_replaced |
Date: |
Wed, 25 Sep 2019 13:45:37 +0000 |
20.09.2019 18:27, Max Reitz wrote:
> We will need this to verify that Quorum can let one of its children be
> replaced without breaking anything else.
>
> Signed-off-by: Max Reitz <address@hidden>
> ---
> block/quorum.c | 23 +++++++++++++++++++++++
> 1 file changed, 23 insertions(+)
>
> diff --git a/block/quorum.c b/block/quorum.c
> index cf2171cc74..207054a64e 100644
> --- a/block/quorum.c
> +++ b/block/quorum.c
> @@ -67,6 +67,13 @@ typedef struct QuorumVotes {
>
> typedef struct QuorumChild {
> BdrvChild *child;
> +
> + /*
> + * If set, check whether this node can be replaced without any
> + * other parent noticing: Unshare CONSISTENT_READ, and take the
> + * WRITE permission.
> + */
> + bool to_be_replaced;
> } QuorumChild;
>
> /* the following structure holds the state of one quorum instance */
> @@ -1128,6 +1135,16 @@ static void quorum_child_perm(BlockDriverState *bs,
> BdrvChild *c,
> uint64_t perm, uint64_t shared,
> uint64_t *nperm, uint64_t *nshared)
> {
> + BDRVQuorumState *s = bs->opaque;
> + int i;
> +
> + for (i = 0; i < s->num_children; i++) {
> + if (s->children[i].child == c) {
> + break;
> + }
> + }
> + assert(!c || i < s->num_children);
seems, the loop is useless if c == NULL.
> +
> *nperm = perm & DEFAULT_PERM_PASSTHROUGH;
>
> /*
> @@ -1137,6 +1154,12 @@ static void quorum_child_perm(BlockDriverState *bs,
> BdrvChild *c,
> *nshared = (shared & (BLK_PERM_CONSISTENT_READ |
> BLK_PERM_WRITE_UNCHANGED))
> | DEFAULT_PERM_UNCHANGED;
> +
> + if (c && s->children[i].to_be_replaced) {
> + /* Prepare for sudden data changes */
> + *nperm |= BLK_PERM_WRITE;
> + *nshared &= ~BLK_PERM_CONSISTENT_READ;
> + }
> }
>
> static const char *const quorum_strong_runtime_opts[] = {
>
--
Best regards,
Vladimir
- Re: [PATCH 03/22] block: Drop bdrv_is_first_non_filter(), (continued)
- [PATCH 04/22] iotests: Let 041 use -blockdev for quorum children, Max Reitz, 2019/09/20
- [PATCH 05/22] quorum: Fix child permissions, Max Reitz, 2019/09/20
- [PATCH 07/22] blkverify: Implement .bdrv_recurse_can_replace(), Max Reitz, 2019/09/20
- [PATCH 09/22] quorum: Add QuorumChild.to_be_replaced, Max Reitz, 2019/09/20
- Re: [PATCH 09/22] quorum: Add QuorumChild.to_be_replaced,
Vladimir Sementsov-Ogievskiy <=
- [PATCH 06/22] block: Add bdrv_recurse_can_replace(), Max Reitz, 2019/09/20
- [PATCH 08/22] quorum: Store children in own structure, Max Reitz, 2019/09/20
- [PATCH 12/22] block: Remove bdrv_recurse_is_first_non_filter(), Max Reitz, 2019/09/20
- [PATCH 11/22] block: Use bdrv_recurse_can_replace(), Max Reitz, 2019/09/20