From: Max Reitz <mreitz@redhat.com>
To: Stefan Hajnoczi <stefanha@gmail.com>,
Stefano Panella <spanella@gmail.com>
Cc: Stefan Hajnoczi <stefanha@redhat.com>,
Kevin Wolf <kwolf@redhat.com>, qemu-devel <qemu-devel@nongnu.org>,
qemu block <qemu-block@nongnu.org>
Subject: Re: [Qemu-devel] [Qemu-block] [PATCH 2/2] iotests: add 208 nbd-server + blockdev-snapshot-sync test case
Date: Wed, 7 Mar 2018 17:43:18 +0100 [thread overview]
Message-ID: <72f1506e-1ed3-183d-db5e-06670241add6@redhat.com> (raw)
In-Reply-To: <CAJSP0QXzMf1UdehS3Cp3Yud6a7U4n-ixYTtCawyd8_wGLbWq0w@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 3073 bytes --]
On 2018-03-07 11:55, Stefan Hajnoczi wrote:
> On Tue, Mar 6, 2018 at 11:25 PM, Stefano Panella <spanella@gmail.com> wrote:
>> I have applied this patch and when I run the following qmp commands I I do
>> not see the crash anymore but there is still something wrong because only
>> /root/a is opened from qemu. It looks like nbd-server-stop is also getting
>> rid of the nodes added with blockdev-snapshot-sync, therfore is than not
>> possible to do blockdev-del on /root/d because node-name is not found
>
> Nodes are reference counted. If nothing holds a refcount then the
> node is freed.
>
> The blockdev-add command holds a reference to the node. The node will
> stay alive until blockdev-del, which releases that reference.
>
> blockdev-snapshot-sync does not hold a reference.
I think that's a bug. When you specify a node name for the new node, it
should get a reference.
> Therefore snapshot
> nodes are freed once nothing is using them anymore. When the snapshot
> node is created, the users of the parent node are updated to point to
> the snapshot node instead. This is why the NBD server switches to the
> snapshot mode after blockdev-snapshot-sync.
>
> This is why the snapshot nodes disappear after the NBD server is
> stopped while /root/a stays alive.
>
> I'm not sure if the current blockdev-snapshot-sync behavior is useful.
> Perhaps the presence of the "snapshot-node-name" argument should cause
> the snapshot node to be treated as monitor-owned, just like
> blockdev-add. This would introduce leaks for existing QMP clients
> though, so it may be necessary to add yet another argument for this
> behavior.
That's true.
> Anyway, I hope this explains the current behavior. I don't see a
> problem with it, but it's something the API users need to be aware of.
Hm, OK.
As an explanation: blockdev-snapshot-sync is from before we had node
names and blockdev-add. You'd just create something that needs the
block layer (like a guest device or an NBD server) and then you'd open
the BDS chain you want to go with it (mostly by just specifying the
filename of the top image, and maybe its format).
Then you'd use blockdev-snapshot-sync to just create an overlay during
runtime, and since there weren't any node names it was clear that it
would go away if you deleted whatever was using the chain (like the NBD
server).
Then we introduced node names, and blockdev-snapshot-sync gained the
ability to give one to the overlay -- basically as an afterthought. I
think we didn't really have a fleshed-out concept of monitor references
back then... So we forgot to give the overlay an additional reference
in such a case (because we didn't know better).
As you pointed to in your other reply, blockdev-snapshot is the "pure"
blockdev command that should ideally be used. It allows you much more
control over the overlay (because you have to do the blockdev-add
yourself), and it doesn't have this reference issue.
Max
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 512 bytes --]
next prev parent reply other threads:[~2018-03-07 16:43 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-06 20:48 [Qemu-devel] [PATCH 0/2] block: fix nbd-server-stop crash after blockdev-snapshot-sync Stefan Hajnoczi
2018-03-06 20:48 ` [Qemu-devel] [PATCH 1/2] block: let blk_add/remove_aio_context_notifier() tolerate BDS changes Stefan Hajnoczi
2018-03-09 15:56 ` Eric Blake
2018-03-12 11:27 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2018-03-12 12:26 ` Eric Blake
2018-03-12 16:17 ` [Qemu-devel] " Max Reitz
2018-03-06 20:48 ` [Qemu-devel] [PATCH 2/2] iotests: add 208 nbd-server + blockdev-snapshot-sync test case Stefan Hajnoczi
2018-03-06 23:25 ` Stefano Panella
2018-03-07 10:55 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2018-03-07 13:57 ` Stefano Panella
2018-03-07 16:16 ` Stefan Hajnoczi
2018-03-07 16:43 ` Stefano Panella
2018-03-07 16:46 ` Max Reitz
2018-03-07 16:43 ` Max Reitz [this message]
2018-03-09 16:08 ` [Qemu-devel] " Eric Blake
2018-03-12 16:27 ` Max Reitz
2018-03-07 23:27 ` [Qemu-devel] [PATCH 0/2] block: fix nbd-server-stop crash after blockdev-snapshot-sync Eric Blake
2018-03-08 17:37 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2018-03-13 1:27 ` Eric Blake
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=72f1506e-1ed3-183d-db5e-06670241add6@redhat.com \
--to=mreitz@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=spanella@gmail.com \
--cc=stefanha@gmail.com \
--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).