Am 03.07.2019 um 19:28 hat Max Reitz geschrieben: > 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 <mre...@redhat.com>
Isn't the real bug that we keep pointing to a node that isn't a parent of the node any more? I think this will effectively disable option inheritance in bdrv_reopen() as long as the filter node is present, which is certainly not what we intended. The intuitive thing would be that after inserting a filter, the image now inherits from the filter node, and when the filter is removed, it inherits from the filter's bs->inherit_from if that becomes a parent of the node. (Though I'm not necessarily saying that my intuition is to be trusted here.) Kevin