block-backend: fix edge case in bdrv_next_cleanup() where BDS associated to BB changes
Same rationale as for commit "block-backend: fix edge case in bdrv_next() where BDS associated to BB changes". The block graph might change between the bdrv_next() call and the bdrv_next_cleanup() call, so it could be that the associated BDS is not the same that was referenced previously anymore. Instead, rely on bdrv_next() to set it->bs to the BDS it referenced and unreference that one in any case. Signed-off-by: Fiona Ebner <f.ebner@proxmox.com> Message-ID: <20240322095009.346989-4-f.ebner@proxmox.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
f6d38c9f6d
commit
bac09b093e
@ -663,13 +663,10 @@ void bdrv_next_cleanup(BdrvNextIterator *it)
|
|||||||
/* Must be called from the main loop */
|
/* Must be called from the main loop */
|
||||||
assert(qemu_get_current_aio_context() == qemu_get_aio_context());
|
assert(qemu_get_current_aio_context() == qemu_get_aio_context());
|
||||||
|
|
||||||
if (it->phase == BDRV_NEXT_BACKEND_ROOTS) {
|
bdrv_unref(it->bs);
|
||||||
if (it->blk) {
|
|
||||||
bdrv_unref(blk_bs(it->blk));
|
if (it->phase == BDRV_NEXT_BACKEND_ROOTS && it->blk) {
|
||||||
blk_unref(it->blk);
|
blk_unref(it->blk);
|
||||||
}
|
|
||||||
} else {
|
|
||||||
bdrv_unref(it->bs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bdrv_next_reset(it);
|
bdrv_next_reset(it);
|
||||||
|
Loading…
Reference in New Issue
Block a user