[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 1/6] block/qdev: Allow node name for drive proper
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH v2 1/6] block/qdev: Allow node name for drive properties |
Date: |
Thu, 30 Jun 2016 16:13:22 +0200 |
If a node name instead of a BlockBackend name is specified as the driver
for a guest device, an anonymous BlockBackend is created now.
Signed-off-by: Kevin Wolf <address@hidden>
---
hw/core/qdev-properties-system.c | 22 +++++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index df38b8a..69b451e 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -72,12 +72,21 @@ static void parse_drive(DeviceState *dev, const char *str,
void **ptr,
const char *propname, Error **errp)
{
BlockBackend *blk;
+ bool blk_created = false;
blk = blk_by_name(str);
if (!blk) {
+ BlockDriverState *bs = bdrv_lookup_bs(NULL, str, NULL);
+ if (bs) {
+ blk = blk_new();
+ blk_insert_bs(blk, bs);
+ blk_created = true;
+ }
+ }
+ if (!blk) {
error_setg(errp, "Property '%s.%s' can't find value '%s'",
object_get_typename(OBJECT(dev)), propname, str);
- return;
+ goto fail;
}
if (blk_attach_dev(blk, dev) < 0) {
DriveInfo *dinfo = blk_legacy_dinfo(blk);
@@ -91,9 +100,16 @@ static void parse_drive(DeviceState *dev, const char *str,
void **ptr,
error_setg(errp, "Drive '%s' is already in use by another device",
str);
}
- return;
+ goto fail;
}
+
*ptr = blk;
+
+fail:
+ if (blk_created) {
+ /* If we need to keep a reference, blk_attach_dev() took it */
+ blk_unref(blk);
+ }
}
static void release_drive(Object *obj, const char *name, void *opaque)
@@ -127,7 +143,7 @@ static void set_drive(Object *obj, Visitor *v, const char
*name, void *opaque,
PropertyInfo qdev_prop_drive = {
.name = "str",
- .description = "ID of a drive to use as a backend",
+ .description = "Node name or ID of a block device to use as a backend",
.get = get_drive,
.set = set_drive,
.release = release_drive,
--
1.8.3.1
- [Qemu-devel] [PATCH v2 0/6] block: Move BB options from blockdev-add to qdev, Kevin Wolf, 2016/06/30
- [Qemu-devel] [PATCH v2 1/6] block/qdev: Allow node name for drive properties,
Kevin Wolf <=
- [Qemu-devel] [PATCH v2 4/6] block/qdev: Allow configuring rerror/werror with qdev properties, Kevin Wolf, 2016/06/30
- [Qemu-devel] [PATCH v2 2/6] block/qdev: Allow configuring WCE with qdev properties, Kevin Wolf, 2016/06/30
- [Qemu-devel] [PATCH v2 3/6] commit: Fix use of error handling policy, Kevin Wolf, 2016/06/30
- [Qemu-devel] [PATCH v2 6/6] block: Remove BB options from blockdev-add, Kevin Wolf, 2016/06/30
- [Qemu-devel] [PATCH v2 5/6] qemu-iotests: Test setting WCE with qdev, Kevin Wolf, 2016/06/30