Skip to content
  • Kevin Wolf's avatar
    block/snapshot: Restrict set of snapshot nodes · 05f4aced
    Kevin Wolf authored
    
    
    Nodes involved in internal snapshots were those that were returned by
    bdrv_next(), inserted and not read-only. bdrv_next() in turn returns all
    nodes that are either the root node of a BlockBackend or monitor-owned
    nodes.
    
    With the typical -drive use, this worked well enough. However, in the
    typical -blockdev case, the user defines one node per option, making all
    nodes monitor-owned nodes. This includes protocol nodes etc. which often
    are not snapshottable, so "savevm" only returns an error.
    
    Change the conditions so that internal snapshot still include all nodes
    that have a BlockBackend attached (we definitely want to snapshot
    anything attached to a guest device and probably also the built-in NBD
    server; snapshotting block job BlockBackends is more of an accident, but
    a preexisting one), but other monitor-owned nodes are only included if
    they have no parents.
    
    This makes internal snapshots usable again with typical -blockdev
    configurations.
    
    Cc: qemu-stable@nongnu.org
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
    Reviewed-by: default avatarEric Blake <eblake@redhat.com>
    Reviewed-by: default avatarPeter Krempa <pkrempa@redhat.com>
    Tested-by: default avatarPeter Krempa <pkrempa@redhat.com>
    05f4aced