qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: "Benoît Canet" <benoit.canet@irqsave.net>
Cc: Fam Zheng <famz@redhat.com>,
	jcody@redhat.com, armbru@redhat.com, qemu-devel@nongnu.org,
	Stefan Hajnoczi <stefanha@redhat.com>,
	pbonzini@redhat.com, mreitz@redhat.com
Subject: Re: [Qemu-devel] Block Filters
Date: Fri, 6 Sep 2013 09:42:02 +0200	[thread overview]
Message-ID: <20130906074202.GD2588@dhcp-200-207.str.redhat.com> (raw)
In-Reply-To: <20130905172953.GE5095@irqsave.net>

Am 05.09.2013 um 19:29 hat Benoît Canet geschrieben:
> Le Thursday 05 Sep 2013 à 18:18:45 (+0800), Fam Zheng a écrit :
> > On Thu, 09/05 12:01, Stefan Hajnoczi wrote:
> > > On Wed, Sep 04, 2013 at 08:15:36PM +0200, Benoît Canet wrote:
> > > > > Propagate operations like snapshot down the tree.  block.c is designed
> > > > > for bs->file/bs->backing_hd kind of BlockDrivers, perhaps it needs to
> > > > > become a bit more generic to support other types of BlockDrivers
> > > > > properly.
> > > > 
> > > > Shouldn't bs->backing_hd become bs->children[0] and bs->file stay the same ?
> > > 
> > > bs->backing_hd and bs->file exist so that block.c can implement generic
> > > functionality shared by a lot of block drivers.  They are for code
> > > reuse.
> > > 
> > > Many places in the block layer have come to assume that there is only
> > > one ->file, for example.  That's not true for quorum or even vmdk.
> > > 
> > > If we forget about code reuse for a second, and just think of BDS trees,
> > > then both ->backing_hd and ->file should be in ->children[].
> > > 
> > > I think the problem we have is that too much of QEMU uses ->file and
> > > ->backing_hd.  It's kind of baked in now to the point where more
> > > flexible block drivers like quorum are hard to represent.
> > > 
> > > ->backing_hd and ->file are mostly image format concepts.  Filters and
> > > protocols could do without them.
> > > 
> > > After saying all that, I don't have a design that makes everything
> > > better :P.
> > > 
> > 
> > Maybe we could start from a generic scheme and add specific operations upon:
> > 
> > I propose we let bs->children[] keep all the node connections, including
> > backing_hd and file, then leave the BlockDriver, BlockFilter or BlockProtocol
> > to implement ->get_backing_hd(), ->get_file_hd(), or even ->get_files(), or
> > mark an operation as NULL.  These operations give semantics to its children (of
> > course they need some semantics to actually be useful), but it's orthogonal to
> > management of elements in the object tree.
> 
> So would bs->children[] be manipulated directly by each BlockDriver, BlockFilter
> BlockProtocol implying the their code have an exact knowledge of the index of
> each bs in bs->children[] ?

I think the driver implementation is the only one who know how to do it.

Is creating external snapshots still the only use case for bs->children[]
in the generic block layer? Because if so, we could indeed rather move
the snapshotting operation into the BlockDrivers.

Oh, and why are you talking about "BlockDriver, BlockFilter,
BlockProtocol"? What's the difference between them and why isn't the one
BlockDriver struct that we have today enough any more?

Kevin

  reply	other threads:[~2013-09-06  7:42 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-03 16:24 [Qemu-devel] Block Filters Benoît Canet
2013-09-04  8:29 ` Stefan Hajnoczi
2013-09-04 18:15   ` Benoît Canet
2013-09-05  7:32     ` Kevin Wolf
2013-09-05 10:01     ` Stefan Hajnoczi
2013-09-05 10:18       ` Fam Zheng
2013-09-05 14:59         ` Stefan Hajnoczi
2013-09-05 17:29         ` Benoît Canet
2013-09-06  7:42           ` Kevin Wolf [this message]
2013-09-06  7:49             ` Fam Zheng
2013-09-06  7:56 ` Fam Zheng
2013-09-06  8:45   ` Kevin Wolf
2013-09-06  9:18     ` Fam Zheng
2013-09-06  9:55       ` Kevin Wolf
2013-09-06 10:50         ` Fam Zheng
2013-09-15 18:10         ` Benoît Canet
2013-09-16  7:41           ` Fam Zheng
2013-09-16 10:43             ` Benoît Canet
2013-09-16 11:00             ` Benoît Canet

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130906074202.GD2588@dhcp-200-207.str.redhat.com \
    --to=kwolf@redhat.com \
    --cc=armbru@redhat.com \
    --cc=benoit.canet@irqsave.net \
    --cc=famz@redhat.com \
    --cc=jcody@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).