mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
block: Attach non-qdev devices as well
For now, this just protects against programming errors like having the same drive back multiple non-qdev devices, or untimely bdrv_delete(). Later commits will add other interesting uses. While there, rename BlockDriverState member peer to dev, bdrv_attach() to bdrv_attach_dev(), bdrv_detach() to bdrv_detach_dev(), and bdrv_get_attached() to bdrv_get_attached_dev(). Signed-off-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
648fb0ea5e
commit
fa879d62eb
12 changed files with 39 additions and 22 deletions
29
block.c
29
block.c
|
@ -755,7 +755,7 @@ void bdrv_make_anon(BlockDriverState *bs)
|
|||
|
||||
void bdrv_delete(BlockDriverState *bs)
|
||||
{
|
||||
assert(!bs->peer);
|
||||
assert(!bs->dev);
|
||||
|
||||
/* remove from list, if necessary */
|
||||
bdrv_make_anon(bs);
|
||||
|
@ -769,26 +769,37 @@ void bdrv_delete(BlockDriverState *bs)
|
|||
g_free(bs);
|
||||
}
|
||||
|
||||
int bdrv_attach(BlockDriverState *bs, DeviceState *qdev)
|
||||
int bdrv_attach_dev(BlockDriverState *bs, void *dev)
|
||||
/* TODO change to DeviceState *dev when all users are qdevified */
|
||||
{
|
||||
if (bs->peer) {
|
||||
if (bs->dev) {
|
||||
return -EBUSY;
|
||||
}
|
||||
bs->peer = qdev;
|
||||
bs->dev = dev;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void bdrv_detach(BlockDriverState *bs, DeviceState *qdev)
|
||||
/* TODO qdevified devices don't use this, remove when devices are qdevified */
|
||||
void bdrv_attach_dev_nofail(BlockDriverState *bs, void *dev)
|
||||
{
|
||||
assert(bs->peer == qdev);
|
||||
bs->peer = NULL;
|
||||
if (bdrv_attach_dev(bs, dev) < 0) {
|
||||
abort();
|
||||
}
|
||||
}
|
||||
|
||||
void bdrv_detach_dev(BlockDriverState *bs, void *dev)
|
||||
/* TODO change to DeviceState *dev when all users are qdevified */
|
||||
{
|
||||
assert(bs->dev == dev);
|
||||
bs->dev = NULL;
|
||||
bs->change_cb = NULL;
|
||||
bs->change_opaque = NULL;
|
||||
}
|
||||
|
||||
DeviceState *bdrv_get_attached(BlockDriverState *bs)
|
||||
/* TODO change to return DeviceState * when all users are qdevified */
|
||||
void *bdrv_get_attached_dev(BlockDriverState *bs)
|
||||
{
|
||||
return bs->peer;
|
||||
return bs->dev;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue