block: Deep-clear inherits_from
commit3cf746b3f16e81b306d732262f4c16bc7707c0ce
authorMax Reitz <mreitz@redhat.com>
Wed, 3 Jul 2019 17:28:07 +0000 (3 19:28 +0200)
committerMax Reitz <mreitz@redhat.com>
Mon, 15 Jul 2019 13:48:40 +0000 (15 15:48 +0200)
tree28aa0427395e399bd9ffd442caa48eea43aee596
parent8441d82d51e25c6a7d1ca92cecc42168f20af72a
block: Deep-clear inherits_from

BDS.inherits_from does not always point to an immediate parent node.
When launching a block job with a filter node, for example, the node
directly below the filter will not point to the filter, but keep its old
pointee (above the filter).

If that pointee goes away while the job is still running, the node's
inherits_from will not be updated and thus point to garbage.  To fix
this, bdrv_unref_child() has to check not only the parent node's
immediate children for nodes whose inherits_from needs to be cleared,
but its whole subtree.

Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190703172813.6868-7-mreitz@redhat.com
Signed-off-by: Max Reitz <mreitz@redhat.com>
block.c