On Sat 21 Apr 2018 03:29:21 PM CEST, Max Reitz wrote:
> This adds a simple copy-on-read filter driver.  It relies on the already
> existing COR functionality in the central block layer code, which may be
> moved here once we no longer need it there.
>
> Signed-off-by: Max Reitz <mre...@redhat.com>

> +#define PERM_PASSTHROUGH (BLK_PERM_CONSISTENT_READ \
> +                          | BLK_PERM_WRITE \
> +                          | BLK_PERM_RESIZE)
> +#define PERM_UNCHANGED (BLK_PERM_ALL & ~PERM_PASSTHROUGH)
> +
> +static void cor_child_perm(BlockDriverState *bs, BdrvChild *c,
> +                           const BdrvChildRole *role,
> +                           BlockReopenQueue *reopen_queue,
> +                           uint64_t perm, uint64_t shared,
> +                           uint64_t *nperm, uint64_t *nshared)
> +{
> +    if (c == NULL) {
> +        *nperm = (perm & PERM_PASSTHROUGH) | BLK_PERM_WRITE_UNCHANGED;
> +        *nshared = (shared & PERM_PASSTHROUGH) | PERM_UNCHANGED;
> +        return;
> +    }
> +
> +    *nperm = (perm & PERM_PASSTHROUGH) |
> +             (c->perm & PERM_UNCHANGED);

I admit I'm not completely familiar with this, but don't you need to add
BLK_PERM_WRITE_UNCHANGED to *nperm ?

> +    *nshared = (shared & PERM_PASSTHROUGH) |
> +               (c->shared_perm & PERM_UNCHANGED);
> +}

Berto

Reply via email to