qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-block] [Qemu-devel] [RFC PATCH 09/41] block: Default .bdrv_chi


From: Fam Zheng
Subject: Re: [Qemu-block] [Qemu-devel] [RFC PATCH 09/41] block: Default .bdrv_child_perm() for format drivers
Date: Tue, 14 Feb 2017 19:13:41 +0800
User-agent: Mutt/1.7.1 (2016-10-04)

On Tue, 02/14 11:37, Kevin Wolf wrote:
> Am 14.02.2017 um 07:01 hat Fam Zheng geschrieben:
> > On Mon, 02/13 18:22, Kevin Wolf wrote:
> > > Almost all format drivers have the same characteristics as far as
> > > permissions are concerned: They have one or more children for storing
> > > their own data and, more importantly, metadata (can be written to and
> > > grow even without external write requests, must be protected against
> > > other writers and present consistent data) and optionally a backing file
> > > (this is just data, so like for a filter, it only depends on what the
> > > parent nodes need).
> > > 
> > > This provides a default implementation that can be shared by most of
> > > our format drivers.
> > > 
> > > Signed-off-by: Kevin Wolf <address@hidden>
> > > ---
> > >  block.c                   | 37 +++++++++++++++++++++++++++++++++++++
> > >  include/block/block_int.h |  8 ++++++++
> > >  2 files changed, 45 insertions(+)
> > > 
> > > diff --git a/block.c b/block.c
> > > index 290768d..8e99bb5 100644
> > > --- a/block.c
> > > +++ b/block.c
> > > @@ -1459,6 +1459,43 @@ void bdrv_filter_default_perms(BlockDriverState 
> > > *bs, BdrvChild *c,
> > >                 (c->shared_perm & DEFAULT_PERM_UNCHANGED);
> > >  }
> > >  
> > > +void bdrv_format_default_perms(BlockDriverState *bs, BdrvChild *c,
> > > +                               const BdrvChildRole *role,
> > > +                               uint64_t perm, uint64_t shared,
> > > +                               uint64_t *nperm, uint64_t *nshared)
> > > +{
> > > +    bool backing = (role == &child_backing);
> > > +    assert(role == &child_backing || role == &child_file);
> > > +
> > > +    if (!backing) {
> > > +        /* Apart from the modifications below, the same permissions are
> > > +         * forwarded and left alone as for filters */
> > > +        bdrv_filter_default_perms(bs, c, role, perm, shared, &perm, 
> > > &shared);
> > > +
> > > +        /* Format drivers may touch metadata even if the guest doesn't 
> > > write */
> > > +        if (!bdrv_is_read_only(bs)) {
> > > +            perm |= BLK_PERM_WRITE | BLK_PERM_RESIZE;
> > > +        }
> > > +
> > > +        /* bs->file always needs to be consistent because of the 
> > > metadata. We
> > > +         * can never allow other users to resize or write to it. */
> > > +        perm |= BLK_PERM_CONSISTENT_READ;
> > > +        shared &= ~(BLK_PERM_WRITE | BLK_PERM_RESIZE);
> > > +    } else {
> > > +        /* We want consistent read from backing files if the parent 
> > > needs it.
> > > +         * No other operations are performed on backing files. */
> > > +        perm &= BLK_PERM_CONSISTENT_READ;
> > 
> > Do you mean "perm &= ~BLK_PERM_CONSISTENT_READ"?
> 
> No. As the comment explains, we want to "forward" the CONSISTENT_READ
> permission and clear everything else.

I see, my thinko.

Fam



reply via email to

[Prev in Thread] Current Thread [Next in Thread]