aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorHanna Reitz <hreitz@redhat.com>2021-11-15 15:54:04 +0100
committerHanna Reitz <hreitz@redhat.com>2021-11-16 09:43:45 +0100
commit82b54cf51656bf3cd5ed1ac549e8a1085a0e3290 (patch)
tree29ab8cc43033097ac21d949d21a97cee484ac966 /hw
parent079bff693bc47bf69fb131f87a03c1689e48ed55 (diff)
downloadqemu-82b54cf51656bf3cd5ed1ac549e8a1085a0e3290.zip
qemu-82b54cf51656bf3cd5ed1ac549e8a1085a0e3290.tar.gz
qemu-82b54cf51656bf3cd5ed1ac549e8a1085a0e3290.tar.bz2
block: Let replace_child_tran keep indirect pointer
As of a future commit, bdrv_replace_child_noperm() will clear the indirect BdrvChild pointer passed to it if the new child BDS is NULL. bdrv_replace_child_tran() will want to let it do that, but revert this change in its abort handler. For that, we need to have it receive a BdrvChild ** pointer, too, and keep it stored in the BdrvReplaceChildState object that we attach to the transaction. Note that we do not need to store it in the BdrvReplaceChildState when new_bs is not NULL, because then there is nothing to revert. This is important so that bdrv_replace_node_noperm() can pass a pointer to a loop-local variable to bdrv_replace_child_tran() without worrying that this pointer will outlive one loop iteration. (Of course, for that to work, bdrv_replace_node_noperm() and in turn bdrv_replace_node() and its relatives may not be called with a NULL @to node. Luckily, they already are not, but now we should assert this.) bdrv_remove_file_or_backing_child() on the other hand needs to ensure that the indirect pointer it passes will stay valid for the duration of the transaction. Ensure this by keeping a strong reference to the BDS whose &bs->backing or &bs->file it passes to bdrv_replace_child_tran(), and giving up that reference only in the transaction .clean() handler. Signed-off-by: Hanna Reitz <hreitz@redhat.com> Message-Id: <20211111120829.81329-9-hreitz@redhat.com> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20211115145409.176785-9-kwolf@redhat.com> Signed-off-by: Hanna Reitz <hreitz@redhat.com>
Diffstat (limited to 'hw')
0 files changed, 0 insertions, 0 deletions