On Tue, Mar 6, 2018 at 11:25 PM, Stefano Panella <spane...@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. 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
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.
If it is a problem for your use case, please explain what you are trying to do.