mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
block: Make BlockBackend own its BlockDriverState
On BlockBackend destruction, unref its BlockDriverState. Replaces the callers' unrefs. This turns the pointer from BlockBackend to BlockDriverState into a strong reference, managed with bdrv_ref() / bdrv_unref(). The back-pointer remains weak. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
8fb3c76c94
commit
9ba10c95a4
6 changed files with 7 additions and 53 deletions
|
@ -872,7 +872,6 @@ static int blk_connect(struct XenDevice *xendev)
|
|||
xen_be_printf(&blkdev->xendev, 0, "error: %s\n",
|
||||
error_get_pretty(local_err));
|
||||
error_free(local_err);
|
||||
bdrv_unref(blkdev->bs);
|
||||
blk_unref(blk);
|
||||
blkdev->bs = NULL;
|
||||
return -1;
|
||||
|
@ -888,7 +887,9 @@ static int blk_connect(struct XenDevice *xendev)
|
|||
}
|
||||
/* blkdev->bs is not create by us, we get a reference
|
||||
* so we can bdrv_unref() unconditionally */
|
||||
bdrv_ref(blkdev->bs);
|
||||
/* Except we don't bdrv_unref() anymore, we blk_unref().
|
||||
* Conditionally, because we can't easily blk_ref() here.
|
||||
* TODO Clean this up! */
|
||||
}
|
||||
bdrv_attach_dev_nofail(blkdev->bs, blkdev);
|
||||
blkdev->file_size = bdrv_getlength(blkdev->bs);
|
||||
|
@ -988,7 +989,6 @@ static void blk_disconnect(struct XenDevice *xendev)
|
|||
|
||||
if (blkdev->bs) {
|
||||
bdrv_detach_dev(blkdev->bs, blkdev);
|
||||
bdrv_unref(blkdev->bs);
|
||||
if (!blkdev->dinfo) {
|
||||
blk_unref(blk_by_name(blkdev->dev));
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue