qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Fam Zheng <famz@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: benoit.canet@irqsave.net, Jeff Cody <jcody@redhat.com>,
	qemu-devel@nongnu.org, armbru@redhat.com, stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH for 2.1 0/2] Fix commit of oversized layer
Date: Thu, 10 Jul 2014 16:42:04 +0800	[thread overview]
Message-ID: <20140710084204.GB22070@T430.redhat.com> (raw)
In-Reply-To: <20140627094449.GB5223@noname.redhat.com>

On Fri, 06/27 11:44, Kevin Wolf wrote:
> In general, it feels like it would be the right thing to do, especially
> considering the goal of operation categories in the final state, but on
> the other hand it means that RESIZE would have to be excluded from
> bs->backing_blocker, too, allowing standalone resize commands on backing
> files. Not sure that this would be a good idea...

Is it really dangerous if we relax the backing_blocker on resize? In general, I
expect the only critical category of operation is chain manipulation,
particularly bdrv_swap.

And speaking of bdrv_swap, in longer term, if we have the BlockBackend that can
serve as a level of abstraction between BlockDriverState (the backend
implementation) and its users (the backend consumers, like device), we can
probably drop bdrv_swap() by updating the BB->BDS link.

To illustrate:

    [top] <----------- device emulation
      |        |------ NBD server
      |        `------ commit block job
    [mid]
      |
    [bot]

When we commit top to mid, bdrv_swap will move the data into original top's
position, so the old users of top now automatically start to use mid (of
course, it is assigned some properties of top, like device name).

    [mid] <----------- device emulation
      |        |------ NBD server
      |        `------ commit block job (done)
      |
    [bot]

Where the original [mid]'s memory is freed (bdrv_unref, precisely).

With the imaginary BlockBackend, we start over again:

    [top] <----------- <backend0> <------- device emulation
      |                    |          `--- NBD server
      |                    |
      |                commit block job
    [mid]
      |
    [bot]

Now the block job, device and NBD server all uses BlockBackend <backend0>, who
represents an endpoint for the blockdev operations. Normally they don't care
who is behind backend0, except that block job will look at the backing BDSes,
because in order to commit through the chain, it has to know the topology
behind it.

When the job is done, block job can safely update the backend's link to point
to [bot], while all the other backend user's pointers remain valid because we
don't move backend0 around. Everyone is happy.

    [top]      /------ <backend0> <------- device emulation
      |        |           |          `--- NBD server
      |        |           |
      |        |       commit block job (done)
    [mid]      |
      |        |
    [bot] <----/

Is this a good direction?

Fam

  reply	other threads:[~2014-07-10  8:42 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-25 20:55 [Qemu-devel] [PATCH for 2.1 0/2] Fix commit of oversized layer Jeff Cody
2014-06-25 20:55 ` [Qemu-devel] [PATCH for 2.1 1/2] block: check for RESIZE blocker in the QMP command, not bdrv_truncate() Jeff Cody
2014-06-25 20:55 ` [Qemu-devel] [PATCH for 2.1 2/2] block: add qemu-iotest for resize base during live commit Jeff Cody
2014-06-25 22:08 ` [Qemu-devel] [PATCH for 2.1 0/2] Fix commit of oversized layer Eric Blake
2014-06-27  9:44 ` Kevin Wolf
2014-07-10  8:42   ` Fam Zheng [this message]
2014-07-10  9:25     ` Kevin Wolf
2014-07-10  9:48       ` Fam Zheng

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=20140710084204.GB22070@T430.redhat.com \
    --to=famz@redhat.com \
    --cc=armbru@redhat.com \
    --cc=benoit.canet@irqsave.net \
    --cc=jcody@redhat.com \
    --cc=kwolf@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).