On 13.02.2017 18:22, Kevin Wolf wrote: > Most filters need permissions related to read and write for their > children, but only if the node has a parent that wants to use the same > operation on the filter. The same is true for resize. > > This adds a default implementation that simply forwards all necessary > permissions to all children of the node and leaves the other permissions > unchanged. > > Signed-off-by: Kevin Wolf <[email protected]> > --- > block.c | 24 ++++++++++++++++++++++++ > include/block/block_int.h | 8 ++++++++ > 2 files changed, 32 insertions(+) > > diff --git a/block.c b/block.c > index c27cdce..290768d 100644 > --- a/block.c > +++ b/block.c > @@ -1436,6 +1436,30 @@ int bdrv_child_try_set_perm(BdrvChild *c, uint64_t > perm, uint64_t shared, > return 0; > } > > +#define DEFAULT_PERM_PASSTHROUGH (BLK_PERM_CONSISTENT_READ \ > + | BLK_PERM_WRITE \ > + | BLK_PERM_WRITE_UNCHANGED \ > + | BLK_PERM_RESIZE) > +#define DEFAULT_PERM_UNCHANGED (BLK_PERM_ALL & ~DEFAULT_PERM_PASSTHROUGH) > + > +void bdrv_filter_default_perms(BlockDriverState *bs, BdrvChild *c, > + const BdrvChildRole *role, > + uint64_t perm, uint64_t shared, > + uint64_t *nperm, uint64_t *nshared) > +{ > + if (c == NULL) { > + *nperm = 0; > + *nshared = BLK_PERM_ALL; > + return; > + } > + > + *nperm = (perm & DEFAULT_PERM_PASSTHROUGH) | > + (c->perm & DEFAULT_PERM_UNCHANGED); > + *nshared = (shared & DEFAULT_PERM_PASSTHROUGH) | > + (c->shared_perm & DEFAULT_PERM_UNCHANGED);
In my opinion, aligning both equal signs without aligning the ampersands
etc. actually hurts readability. I would not align the equal signs.
Just a stylistic pick, nothing else.
(btw, if it isn't clear: Any patch I'm not replying to looks good to me
-- apart from patch 6 where Fam has already raised the concern I have,
too. I don't give R-bs though because this is still an RFC O:-))
Max
> +}
> +
> +
> static void bdrv_replace_child(BdrvChild *child, BlockDriverState *new_bs)
> {
> BlockDriverState *old_bs = child->bs;
> diff --git a/include/block/block_int.h b/include/block/block_int.h
> index 8578e17..2d74f92 100644
> --- a/include/block/block_int.h
> +++ b/include/block/block_int.h
> @@ -877,6 +877,14 @@ void bdrv_child_set_perm(BdrvChild *c, uint64_t perm,
> uint64_t shared);
> int bdrv_child_try_set_perm(BdrvChild *c, uint64_t perm, uint64_t shared,
> Error **errp);
>
> +/* Default implementation for BlockDriver.bdrv_child_perm() that can be used
> by
> + * block filters: Forward CONSISTENT_READ, WRITE, WRITE_UNCHANGED and RESIZE
> to
> + * all children */
> +void bdrv_filter_default_perms(BlockDriverState *bs, BdrvChild *c,
> + const BdrvChildRole *role,
> + uint64_t perm, uint64_t shared,
> + uint64_t *nperm, uint64_t *nshared);
> +
>
> const char *bdrv_get_parent_name(const BlockDriverState *bs);
> void blk_dev_change_media_cb(BlockBackend *blk, bool load);
>
signature.asc
Description: OpenPGP digital signature
