* [Qemu-devel] [PATCH 0/9] block: -device drive=<node-name> fixes
@ 2017-07-12 12:57 Kevin Wolf
2017-07-12 12:57 ` [Qemu-devel] [PATCH 1/9] block: Make blk_get_attached_dev_id() public Kevin Wolf
` (8 more replies)
0 siblings, 9 replies; 20+ messages in thread
From: Kevin Wolf @ 2017-07-12 12:57 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, mreitz, eblake, jsnow, pbonzini, armbru, qemu-devel
Since 2.9 it is possible for a user to care only about nodes and qdev devices,
but not about BlockBackends, by defining with -blockdev and using their node
name in -device. Devices create an anonymous BlockBackend internally then.
One of the major problems in this setup is that such devices are not listed in
query-block or HMP 'info block' because the BBs are not monitor-owned. A recent
discussion concluded that we really want to replace query-block and friends
with something that matches QEMU's internals better, but there's no way to do
that in 2.10 (and I wouldn't bet on it to be completed for 2.11). So for now,
just make the devices appear in query-block and add the qdev ID there in order
to make the devices identifiable (they have 'device': '' because the BB is
anonymous).
With the additional qdev field, it turned out that with empty drives, ide-cd
and scsi-cd weren't even properly attached to the BlockBackend. If you do it
right, this even results in crashes. (Floppy already gets it right, in case you
wondered.)
After this series, -device drive=<node-name> should be reasonably usable
without a major loss of functionality like before.
Kevin Wolf (9):
block: Make blk_get_attached_dev_id() public
block/qapi: Add qdev device name to query-block
block: Make blk_all_next() public
block/qapi: Use blk_all_next() for query-block
block: List anonymous device BBs in query-block
ide: bdrv_attach_dev() for empty CD-ROM
scsi-disk: bdrv_attach_dev() for empty CD-ROM
qemu-iotests: Test 'info block'
qemu-iotests: Test unplug of -device without drive
block/block-backend.c | 5 +-
block/qapi.c | 20 +-
hmp.c | 11 +-
hw/ide/qdev.c | 3 +
hw/scsi/scsi-disk.c | 5 +
include/sysemu/block-backend.h | 2 +
qapi/block-core.json | 5 +-
tests/qemu-iotests/067 | 13 ++
tests/qemu-iotests/067.out | 40 ++++
tests/qemu-iotests/186 | 147 +++++++++++++
tests/qemu-iotests/186.out | 489 +++++++++++++++++++++++++++++++++++++++++
tests/qemu-iotests/group | 1 +
12 files changed, 731 insertions(+), 10 deletions(-)
create mode 100755 tests/qemu-iotests/186
create mode 100644 tests/qemu-iotests/186.out
--
1.8.3.1
^ permalink raw reply [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH 1/9] block: Make blk_get_attached_dev_id() public
2017-07-12 12:57 [Qemu-devel] [PATCH 0/9] block: -device drive=<node-name> fixes Kevin Wolf
@ 2017-07-12 12:57 ` Kevin Wolf
2017-07-12 14:53 ` Eric Blake
2017-07-12 12:57 ` [Qemu-devel] [PATCH 2/9] block/qapi: Add qdev device name to query-block Kevin Wolf
` (7 subsequent siblings)
8 siblings, 1 reply; 20+ messages in thread
From: Kevin Wolf @ 2017-07-12 12:57 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, mreitz, eblake, jsnow, pbonzini, armbru, qemu-devel
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block/block-backend.c | 3 +--
include/sysemu/block-backend.h | 1 +
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/block/block-backend.c b/block/block-backend.c
index 0df3457..d60e53b 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -83,7 +83,6 @@ static const AIOCBInfo block_backend_aiocb_info = {
static void drive_info_del(DriveInfo *dinfo);
static BlockBackend *bdrv_first_blk(BlockDriverState *bs);
-static char *blk_get_attached_dev_id(BlockBackend *blk);
/* All BlockBackends */
static QTAILQ_HEAD(, BlockBackend) block_backends =
@@ -726,7 +725,7 @@ void *blk_get_attached_dev(BlockBackend *blk)
/* Return the qdev ID, or if no ID is assigned the QOM path, of the block
* device attached to the BlockBackend. */
-static char *blk_get_attached_dev_id(BlockBackend *blk)
+char *blk_get_attached_dev_id(BlockBackend *blk)
{
DeviceState *dev;
diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h
index 1e05281..80096f2 100644
--- a/include/sysemu/block-backend.h
+++ b/include/sysemu/block-backend.h
@@ -126,6 +126,7 @@ int blk_attach_dev(BlockBackend *blk, DeviceState *dev);
void blk_attach_dev_legacy(BlockBackend *blk, void *dev);
void blk_detach_dev(BlockBackend *blk, void *dev);
void *blk_get_attached_dev(BlockBackend *blk);
+char *blk_get_attached_dev_id(BlockBackend *blk);
BlockBackend *blk_by_dev(void *dev);
BlockBackend *blk_by_qdev_id(const char *id, Error **errp);
void blk_set_dev_ops(BlockBackend *blk, const BlockDevOps *ops, void *opaque);
--
1.8.3.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH 2/9] block/qapi: Add qdev device name to query-block
2017-07-12 12:57 [Qemu-devel] [PATCH 0/9] block: -device drive=<node-name> fixes Kevin Wolf
2017-07-12 12:57 ` [Qemu-devel] [PATCH 1/9] block: Make blk_get_attached_dev_id() public Kevin Wolf
@ 2017-07-12 12:57 ` Kevin Wolf
2017-07-12 15:06 ` Eric Blake
2017-07-12 12:57 ` [Qemu-devel] [PATCH 3/9] block: Make blk_all_next() public Kevin Wolf
` (6 subsequent siblings)
8 siblings, 1 reply; 20+ messages in thread
From: Kevin Wolf @ 2017-07-12 12:57 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, mreitz, eblake, jsnow, pbonzini, armbru, qemu-devel
With -blockdev/-device, users can indirectly create anonymous
BlockBackends, in the state of which they are still interested. As a
preparation for making such BBs visible in query-block, make sure that
they can be identified even without a name by adding the ID/QOM path of
their qdev device to BlockInfo.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block/qapi.c | 10 ++++++++++
hmp.c | 3 +++
qapi/block-core.json | 5 ++++-
tests/qemu-iotests/067.out | 1 +
4 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/block/qapi.c b/block/qapi.c
index 0a41d59..705cd11 100644
--- a/block/qapi.c
+++ b/block/qapi.c
@@ -322,11 +322,21 @@ static void bdrv_query_info(BlockBackend *blk, BlockInfo **p_info,
{
BlockInfo *info = g_malloc0(sizeof(*info));
BlockDriverState *bs = blk_bs(blk);
+ char *qdev;
+
info->device = g_strdup(blk_name(blk));
info->type = g_strdup("unknown");
info->locked = blk_dev_is_medium_locked(blk);
info->removable = blk_dev_has_removable_media(blk);
+ qdev = blk_get_attached_dev_id(blk);
+ if (qdev && *qdev) {
+ info->has_qdev = true;
+ info->qdev = qdev;
+ } else {
+ g_free(qdev);
+ }
+
if (blk_dev_has_tray(blk)) {
info->has_tray_open = true;
info->tray_open = blk_dev_is_tray_open(blk);
diff --git a/hmp.c b/hmp.c
index dee4028..d1d769e 100644
--- a/hmp.c
+++ b/hmp.c
@@ -425,6 +425,9 @@ static void print_block_info(Monitor *mon, BlockInfo *info,
}
if (info) {
+ if (info->has_qdev) {
+ monitor_printf(mon, " Attached to: %s\n", info->qdev);
+ }
if (info->has_io_status && info->io_status != BLOCK_DEVICE_IO_STATUS_OK) {
monitor_printf(mon, " I/O status: %s\n",
BlockDeviceIoStatus_lookup[info->io_status]);
diff --git a/qapi/block-core.json b/qapi/block-core.json
index f85c223..69b3c3c 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -433,6 +433,9 @@
#
# @device: The device name associated with the virtual device.
#
+# @qdev: The qdev ID, or if no ID is assigned the QOM path, of the block
+# device.
+#
# @type: This field is returned only for compatibility reasons, it should
# not be used (always returns 'unknown')
#
@@ -458,7 +461,7 @@
# Since: 0.14.0
##
{ 'struct': 'BlockInfo',
- 'data': {'device': 'str', 'type': 'str', 'removable': 'bool',
+ 'data': {'device': 'str', '*qdev': 'str', 'type': 'str', 'removable': 'bool',
'locked': 'bool', '*inserted': 'BlockDeviceInfo',
'*tray_open': 'bool', '*io-status': 'BlockDeviceIoStatus',
'*dirty-bitmaps': ['BlockDirtyInfo'] } }
diff --git a/tests/qemu-iotests/067.out b/tests/qemu-iotests/067.out
index 782eae2..e3c4496 100644
--- a/tests/qemu-iotests/067.out
+++ b/tests/qemu-iotests/067.out
@@ -57,6 +57,7 @@ Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,if=none,id=disk -device virti
"file": "TEST_DIR/t.qcow2",
"encryption_key_missing": false
},
+ "qdev": "/machine/peripheral/virtio0/virtio-backend",
"type": "unknown"
}
]
--
1.8.3.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH 3/9] block: Make blk_all_next() public
2017-07-12 12:57 [Qemu-devel] [PATCH 0/9] block: -device drive=<node-name> fixes Kevin Wolf
2017-07-12 12:57 ` [Qemu-devel] [PATCH 1/9] block: Make blk_get_attached_dev_id() public Kevin Wolf
2017-07-12 12:57 ` [Qemu-devel] [PATCH 2/9] block/qapi: Add qdev device name to query-block Kevin Wolf
@ 2017-07-12 12:57 ` Kevin Wolf
2017-07-12 15:25 ` Eric Blake
2017-07-12 12:57 ` [Qemu-devel] [PATCH 4/9] block/qapi: Use blk_all_next() for query-block Kevin Wolf
` (5 subsequent siblings)
8 siblings, 1 reply; 20+ messages in thread
From: Kevin Wolf @ 2017-07-12 12:57 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, mreitz, eblake, jsnow, pbonzini, armbru, qemu-devel
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block/block-backend.c | 2 +-
include/sysemu/block-backend.h | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/block/block-backend.c b/block/block-backend.c
index d60e53b..15072f8 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -342,7 +342,7 @@ void blk_unref(BlockBackend *blk)
* Behaves similarly to blk_next() but iterates over all BlockBackends, even the
* ones which are hidden (i.e. are not referenced by the monitor).
*/
-static BlockBackend *blk_all_next(BlockBackend *blk)
+BlockBackend *blk_all_next(BlockBackend *blk)
{
return blk ? QTAILQ_NEXT(blk, link)
: QTAILQ_FIRST(&block_backends);
diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h
index 80096f2..dfdd3b8 100644
--- a/include/sysemu/block-backend.h
+++ b/include/sysemu/block-backend.h
@@ -100,6 +100,7 @@ void blk_remove_all_bs(void);
const char *blk_name(const BlockBackend *blk);
BlockBackend *blk_by_name(const char *name);
BlockBackend *blk_next(BlockBackend *blk);
+BlockBackend *blk_all_next(BlockBackend *blk);
bool monitor_add_blk(BlockBackend *blk, const char *name, Error **errp);
void monitor_remove_blk(BlockBackend *blk);
--
1.8.3.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH 4/9] block/qapi: Use blk_all_next() for query-block
2017-07-12 12:57 [Qemu-devel] [PATCH 0/9] block: -device drive=<node-name> fixes Kevin Wolf
` (2 preceding siblings ...)
2017-07-12 12:57 ` [Qemu-devel] [PATCH 3/9] block: Make blk_all_next() public Kevin Wolf
@ 2017-07-12 12:57 ` Kevin Wolf
2017-07-12 15:27 ` Eric Blake
2017-07-12 12:57 ` [Qemu-devel] [PATCH 5/9] block: List anonymous device BBs in query-block Kevin Wolf
` (4 subsequent siblings)
8 siblings, 1 reply; 20+ messages in thread
From: Kevin Wolf @ 2017-07-12 12:57 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, mreitz, eblake, jsnow, pbonzini, armbru, qemu-devel
This patch replaces the blk_next() loop in query-block by a
blk_all_next() one so that we also get access to BlockBackends that
aren't owned by the monitor. For now, the next thing we do is check
whether each BB has a name, so there is no semantical difference.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block/qapi.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/block/qapi.c b/block/qapi.c
index 705cd11..2f86c79 100644
--- a/block/qapi.c
+++ b/block/qapi.c
@@ -472,8 +472,14 @@ BlockInfoList *qmp_query_block(Error **errp)
BlockBackend *blk;
Error *local_err = NULL;
- for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
- BlockInfoList *info = g_malloc0(sizeof(*info));
+ for (blk = blk_all_next(NULL); blk; blk = blk_all_next(blk)) {
+ BlockInfoList *info;
+
+ if (!*blk_name(blk)) {
+ continue;
+ }
+
+ info = g_malloc0(sizeof(*info));
bdrv_query_info(blk, &info->value, &local_err);
if (local_err) {
error_propagate(errp, local_err);
--
1.8.3.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH 5/9] block: List anonymous device BBs in query-block
2017-07-12 12:57 [Qemu-devel] [PATCH 0/9] block: -device drive=<node-name> fixes Kevin Wolf
` (3 preceding siblings ...)
2017-07-12 12:57 ` [Qemu-devel] [PATCH 4/9] block/qapi: Use blk_all_next() for query-block Kevin Wolf
@ 2017-07-12 12:57 ` Kevin Wolf
2017-07-12 15:47 ` Eric Blake
2017-07-12 12:57 ` [Qemu-devel] [PATCH 6/9] ide: bdrv_attach_dev() for empty CD-ROM Kevin Wolf
` (3 subsequent siblings)
8 siblings, 1 reply; 20+ messages in thread
From: Kevin Wolf @ 2017-07-12 12:57 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, mreitz, eblake, jsnow, pbonzini, armbru, qemu-devel
Instead of listing only monitor-owned BlockBackends in query-block, also
add those anonymous BlockBackends that are owned by a qdev device and as
such under the control of the user.
This allows to use query-block to inspect BlockBackends for the modern
configuration syntax with -blockdev and -device.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block/qapi.c | 2 +-
hmp.c | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/block/qapi.c b/block/qapi.c
index 2f86c79..b5bb42b 100644
--- a/block/qapi.c
+++ b/block/qapi.c
@@ -475,7 +475,7 @@ BlockInfoList *qmp_query_block(Error **errp)
for (blk = blk_all_next(NULL); blk; blk = blk_all_next(blk)) {
BlockInfoList *info;
- if (!*blk_name(blk)) {
+ if (!*blk_name(blk) && !blk_get_attached_dev(blk)) {
continue;
}
diff --git a/hmp.c b/hmp.c
index d1d769e..4caa9c1 100644
--- a/hmp.c
+++ b/hmp.c
@@ -401,16 +401,16 @@ static void print_block_info(Monitor *mon, BlockInfo *info,
assert(!info || !info->has_inserted || info->inserted == inserted);
- if (info) {
+ if (info && *info->device) {
monitor_printf(mon, "%s", info->device);
if (inserted && inserted->has_node_name) {
monitor_printf(mon, " (%s)", inserted->node_name);
}
} else {
- assert(inserted);
+ assert(info || inserted);
monitor_printf(mon, "%s",
- inserted->has_node_name
- ? inserted->node_name
+ inserted && inserted->has_node_name ? inserted->node_name
+ : info && info->has_qdev ? info->qdev
: "<anonymous>");
}
--
1.8.3.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH 6/9] ide: bdrv_attach_dev() for empty CD-ROM
2017-07-12 12:57 [Qemu-devel] [PATCH 0/9] block: -device drive=<node-name> fixes Kevin Wolf
` (4 preceding siblings ...)
2017-07-12 12:57 ` [Qemu-devel] [PATCH 5/9] block: List anonymous device BBs in query-block Kevin Wolf
@ 2017-07-12 12:57 ` Kevin Wolf
2017-07-12 15:52 ` Eric Blake
2017-07-12 12:57 ` [Qemu-devel] [PATCH 7/9] scsi-disk: " Kevin Wolf
` (2 subsequent siblings)
8 siblings, 1 reply; 20+ messages in thread
From: Kevin Wolf @ 2017-07-12 12:57 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, mreitz, eblake, jsnow, pbonzini, armbru, qemu-devel
If no drive=... option is passed (for an empty drive), we don't only
lack the BlockBackend normally created by parse_drive(), but we also
need to manually call blk_attach_dev().
IDE does not support hot unplug, but if it did, qdev would take care to
call the matching blk_detach_dev() on unplug.
This fixes at least the bug that such devices didn't show up in
query-block, and probably some more problems.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
hw/ide/qdev.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
index 299e592..cc2f5bd 100644
--- a/hw/ide/qdev.c
+++ b/hw/ide/qdev.c
@@ -164,6 +164,7 @@ static int ide_dev_initfn(IDEDevice *dev, IDEDriveKind kind)
IDEBus *bus = DO_UPCAST(IDEBus, qbus, dev->qdev.parent_bus);
IDEState *s = bus->ifs + dev->unit;
Error *err = NULL;
+ int ret;
if (!dev->conf.blk) {
if (kind != IDE_CD) {
@@ -172,6 +173,8 @@ static int ide_dev_initfn(IDEDevice *dev, IDEDriveKind kind)
} else {
/* Anonymous BlockBackend for an empty drive */
dev->conf.blk = blk_new(0, BLK_PERM_ALL);
+ ret = blk_attach_dev(dev->conf.blk, &dev->qdev);
+ assert(ret == 0);
}
}
--
1.8.3.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH 7/9] scsi-disk: bdrv_attach_dev() for empty CD-ROM
2017-07-12 12:57 [Qemu-devel] [PATCH 0/9] block: -device drive=<node-name> fixes Kevin Wolf
` (5 preceding siblings ...)
2017-07-12 12:57 ` [Qemu-devel] [PATCH 6/9] ide: bdrv_attach_dev() for empty CD-ROM Kevin Wolf
@ 2017-07-12 12:57 ` Kevin Wolf
2017-07-12 15:58 ` Eric Blake
2017-07-12 12:57 ` [Qemu-devel] [PATCH 8/9] qemu-iotests: Test 'info block' Kevin Wolf
2017-07-12 12:57 ` [Qemu-devel] [PATCH 9/9] qemu-iotests: Test unplug of -device without drive Kevin Wolf
8 siblings, 1 reply; 20+ messages in thread
From: Kevin Wolf @ 2017-07-12 12:57 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, mreitz, eblake, jsnow, pbonzini, armbru, qemu-devel
If no drive=... option is passed (for an empty drive), we don't only
lack the BlockBackend normally created by parse_drive(), but we also
need to manually call blk_attach_dev().
This fixes at least a segfault when unplugging such devices, the bug
that they didn't show up in query-block, and probably some more
problems.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
hw/scsi/scsi-disk.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
index a53f058..5f1e5e8 100644
--- a/hw/scsi/scsi-disk.c
+++ b/hw/scsi/scsi-disk.c
@@ -2384,9 +2384,14 @@ static void scsi_hd_realize(SCSIDevice *dev, Error **errp)
static void scsi_cd_realize(SCSIDevice *dev, Error **errp)
{
SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, dev);
+ int ret;
if (!dev->conf.blk) {
+ /* Anonymous BlockBackend for an empty drive. As we put it into
+ * dev->conf, qdev takes care of detaching on unplug. */
dev->conf.blk = blk_new(0, BLK_PERM_ALL);
+ ret = blk_attach_dev(dev->conf.blk, &dev->qdev);
+ assert(ret == 0);
}
s->qdev.blocksize = 2048;
--
1.8.3.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH 8/9] qemu-iotests: Test 'info block'
2017-07-12 12:57 [Qemu-devel] [PATCH 0/9] block: -device drive=<node-name> fixes Kevin Wolf
` (6 preceding siblings ...)
2017-07-12 12:57 ` [Qemu-devel] [PATCH 7/9] scsi-disk: " Kevin Wolf
@ 2017-07-12 12:57 ` Kevin Wolf
2017-07-12 16:22 ` Eric Blake
2017-07-12 12:57 ` [Qemu-devel] [PATCH 9/9] qemu-iotests: Test unplug of -device without drive Kevin Wolf
8 siblings, 1 reply; 20+ messages in thread
From: Kevin Wolf @ 2017-07-12 12:57 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, mreitz, eblake, jsnow, pbonzini, armbru, qemu-devel
This test makes sure that all block devices show up on 'info block',
with all of the expected information, in different configurations.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
tests/qemu-iotests/186 | 147 ++++++++++++++
tests/qemu-iotests/186.out | 489 +++++++++++++++++++++++++++++++++++++++++++++
tests/qemu-iotests/group | 1 +
3 files changed, 637 insertions(+)
create mode 100755 tests/qemu-iotests/186
create mode 100644 tests/qemu-iotests/186.out
diff --git a/tests/qemu-iotests/186 b/tests/qemu-iotests/186
new file mode 100755
index 0000000..ab83ee4
--- /dev/null
+++ b/tests/qemu-iotests/186
@@ -0,0 +1,147 @@
+#!/bin/bash
+#
+# Test 'info block' with all kinds of configurations
+#
+# Copyright (C) 2017 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+
+# creator
+owner=kwolf@redhat.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+status=1 # failure is the default!
+
+_cleanup()
+{
+ _cleanup_test_img
+}
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_supported_fmt qcow2
+_supported_proto file
+_supported_os Linux
+
+if [ "$QEMU_DEFAULT_MACHINE" != "pc" ]; then
+ _notrun "Requires a PC machine"
+fi
+
+function do_run_qemu()
+{
+ echo Testing: "$@"
+
+ (
+ if ! test -t 0; then
+ while read cmd; do
+ echo $cmd
+ done
+ fi
+ echo quit
+ ) | $QEMU -S -nodefaults -display none -device virtio-scsi-pci -monitor stdio "$@"
+ echo
+}
+
+function check_info_block()
+{
+ echo "info block" |
+ QEMU_OPTIONS="" do_run_qemu "$@" | _filter_win32 | _filter_hmp |
+ _filter_qemu | _filter_generated_node_ids
+}
+
+
+size=64M
+_make_test_img $size
+
+removable="floppy ide-cd scsi-cd"
+fixed="ide-hd scsi-hd virtio-blk-pci"
+
+echo
+echo "=== Empty drives ==="
+echo
+
+for dev in $removable; do
+ check_info_block -device $dev
+ check_info_block -device $dev,id=qdev_id
+done
+
+echo
+echo "=== -blockdev/-device=<node-name> ==="
+echo
+
+for dev in $fixed $removable; do
+ check_info_block -blockdev driver=null-co,node-name=null -device $dev,drive=null
+ check_info_block -blockdev driver=null-co,node-name=null -device $dev,drive=null,id=qdev_id
+done
+
+echo
+echo "=== -drive if=none/-device=<node-name> ==="
+echo
+
+# This creates two BlockBackends that will show up in 'info block'!
+# A monitor-owned one from -drive, and anonymous one from -device
+for dev in $fixed $removable; do
+ check_info_block -drive if=none,driver=null-co,node-name=null -device $dev,drive=null,id=qdev_id
+done
+
+echo
+echo "=== -drive if=none/-device=<bb-name> (with medium) ==="
+echo
+
+for dev in $fixed $removable; do
+ check_info_block -drive if=none,driver=null-co,node-name=null -device $dev,drive=none0
+ check_info_block -drive if=none,driver=null-co,node-name=null -device $dev,drive=none0,id=qdev_id
+done
+
+echo
+echo "=== -drive if=none/-device=<bb-name> (without medium) ==="
+echo
+
+check_info_block -drive if=none
+
+for dev in $removable; do
+ check_info_block -drive if=none -device $dev,drive=none0
+ check_info_block -drive if=none -device $dev,drive=none0,id=qdev_id
+done
+
+echo
+echo "=== -drive if=... ==="
+echo
+
+check_info_block -drive if=floppy
+check_info_block -drive if=floppy,driver=null-co
+
+check_info_block -drive if=ide,driver=null-co
+check_info_block -drive if=ide,media=cdrom
+check_info_block -drive if=ide,driver=null-co,media=cdrom
+
+check_info_block -drive if=scsi,driver=null-co
+check_info_block -drive if=scsi,media=cdrom
+check_info_block -drive if=scsi,driver=null-co,media=cdrom
+
+check_info_block -drive if=virtio,driver=null-co
+
+check_info_block -drive if=pflash,driver=null-co,size=1M
+
+# success, all done
+echo "*** done"
+rm -f $seq.full
+status=0
diff --git a/tests/qemu-iotests/186.out b/tests/qemu-iotests/186.out
new file mode 100644
index 0000000..3cf19be
--- /dev/null
+++ b/tests/qemu-iotests/186.out
@@ -0,0 +1,489 @@
+QA output created by 186
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
+
+=== Empty drives ===
+
+Testing: -device floppy
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+/machine/peripheral-anon/device[1]: [not inserted]
+ Attached to: /machine/peripheral-anon/device[1]
+ Removable device: not locked, tray closed
+(qemu) quit
+
+Testing: -device floppy,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+qdev_id: [not inserted]
+ Attached to: qdev_id
+ Removable device: not locked, tray closed
+(qemu) quit
+
+Testing: -device ide-cd
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+/machine/peripheral-anon/device[1]: [not inserted]
+ Attached to: /machine/peripheral-anon/device[1]
+ Removable device: not locked, tray closed
+(qemu) quit
+
+Testing: -device ide-cd,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+qdev_id: [not inserted]
+ Attached to: qdev_id
+ Removable device: not locked, tray closed
+(qemu) quit
+
+Testing: -device scsi-cd
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+/machine/peripheral-anon/device[1]: [not inserted]
+ Attached to: /machine/peripheral-anon/device[1]
+ Removable device: not locked, tray closed
+(qemu) quit
+
+Testing: -device scsi-cd,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+qdev_id: [not inserted]
+ Attached to: qdev_id
+ Removable device: not locked, tray closed
+(qemu) quit
+
+
+=== -blockdev/-device=<node-name> ===
+
+Testing: -blockdev driver=null-co,node-name=null -device ide-hd,drive=null
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+null: null-co:// (null-co)
+ Attached to: /machine/peripheral-anon/device[1]
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -blockdev driver=null-co,node-name=null -device ide-hd,drive=null,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+null: null-co:// (null-co)
+ Attached to: qdev_id
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -blockdev driver=null-co,node-name=null -device scsi-hd,drive=null
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+null: null-co:// (null-co)
+ Attached to: /machine/peripheral-anon/device[1]
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -blockdev driver=null-co,node-name=null -device scsi-hd,drive=null,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+null: null-co:// (null-co)
+ Attached to: qdev_id
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -blockdev driver=null-co,node-name=null -device virtio-blk-pci,drive=null
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+null: null-co:// (null-co)
+ Attached to: /machine/peripheral-anon/device[1]/virtio-backend
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -blockdev driver=null-co,node-name=null -device virtio-blk-pci,drive=null,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+null: null-co:// (null-co)
+ Attached to: /machine/peripheral/qdev_id/virtio-backend
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -blockdev driver=null-co,node-name=null -device floppy,drive=null
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+null: null-co:// (null-co)
+ Attached to: /machine/peripheral-anon/device[1]
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -blockdev driver=null-co,node-name=null -device floppy,drive=null,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+null: null-co:// (null-co)
+ Attached to: qdev_id
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -blockdev driver=null-co,node-name=null -device ide-cd,drive=null
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+null: null-co:// (null-co)
+ Attached to: /machine/peripheral-anon/device[1]
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -blockdev driver=null-co,node-name=null -device ide-cd,drive=null,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+null: null-co:// (null-co)
+ Attached to: qdev_id
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -blockdev driver=null-co,node-name=null -device scsi-cd,drive=null
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+null: null-co:// (null-co)
+ Attached to: /machine/peripheral-anon/device[1]
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -blockdev driver=null-co,node-name=null -device scsi-cd,drive=null,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+null: null-co:// (null-co)
+ Attached to: qdev_id
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+(qemu) quit
+
+
+=== -drive if=none/-device=<node-name> ===
+
+Testing: -drive if=none,driver=null-co,node-name=null -device ide-hd,drive=null,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0 (null): null-co:// (null-co)
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+
+null: null-co:// (null-co)
+ Attached to: qdev_id
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=none,driver=null-co,node-name=null -device scsi-hd,drive=null,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0 (null): null-co:// (null-co)
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+
+null: null-co:// (null-co)
+ Attached to: qdev_id
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=none,driver=null-co,node-name=null -device virtio-blk-pci,drive=null,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0 (null): null-co:// (null-co)
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+
+null: null-co:// (null-co)
+ Attached to: /machine/peripheral/qdev_id/virtio-backend
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=none,driver=null-co,node-name=null -device floppy,drive=null,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0 (null): null-co:// (null-co)
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+
+null: null-co:// (null-co)
+ Attached to: qdev_id
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=none,driver=null-co,node-name=null -device ide-cd,drive=null,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0 (null): null-co:// (null-co)
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+
+null: null-co:// (null-co)
+ Attached to: qdev_id
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=none,driver=null-co,node-name=null -device scsi-cd,drive=null,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0 (null): null-co:// (null-co)
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+
+null: null-co:// (null-co)
+ Attached to: qdev_id
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+(qemu) quit
+
+
+=== -drive if=none/-device=<bb-name> (with medium) ===
+
+Testing: -drive if=none,driver=null-co,node-name=null -device ide-hd,drive=none0
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0 (null): null-co:// (null-co)
+ Attached to: /machine/peripheral-anon/device[1]
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=none,driver=null-co,node-name=null -device ide-hd,drive=none0,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0 (null): null-co:// (null-co)
+ Attached to: qdev_id
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=none,driver=null-co,node-name=null -device scsi-hd,drive=none0
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0 (null): null-co:// (null-co)
+ Attached to: /machine/peripheral-anon/device[1]
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=none,driver=null-co,node-name=null -device scsi-hd,drive=none0,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0 (null): null-co:// (null-co)
+ Attached to: qdev_id
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=none,driver=null-co,node-name=null -device virtio-blk-pci,drive=none0
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0 (null): null-co:// (null-co)
+ Attached to: /machine/peripheral-anon/device[1]/virtio-backend
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=none,driver=null-co,node-name=null -device virtio-blk-pci,drive=none0,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0 (null): null-co:// (null-co)
+ Attached to: /machine/peripheral/qdev_id/virtio-backend
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=none,driver=null-co,node-name=null -device floppy,drive=none0
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0 (null): null-co:// (null-co)
+ Attached to: /machine/peripheral-anon/device[1]
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=none,driver=null-co,node-name=null -device floppy,drive=none0,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0 (null): null-co:// (null-co)
+ Attached to: qdev_id
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=none,driver=null-co,node-name=null -device ide-cd,drive=none0
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0 (null): null-co:// (null-co)
+ Attached to: /machine/peripheral-anon/device[1]
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=none,driver=null-co,node-name=null -device ide-cd,drive=none0,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0 (null): null-co:// (null-co)
+ Attached to: qdev_id
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=none,driver=null-co,node-name=null -device scsi-cd,drive=none0
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0 (null): null-co:// (null-co)
+ Attached to: /machine/peripheral-anon/device[1]
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=none,driver=null-co,node-name=null -device scsi-cd,drive=none0,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0 (null): null-co:// (null-co)
+ Attached to: qdev_id
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+(qemu) quit
+
+
+=== -drive if=none/-device=<bb-name> (without medium) ===
+
+Testing: -drive if=none
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0: [not inserted]
+ Removable device: not locked, tray closed
+(qemu) quit
+
+Testing: -drive if=none -device floppy,drive=none0
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0: [not inserted]
+ Attached to: /machine/peripheral-anon/device[1]
+ Removable device: not locked, tray closed
+(qemu) quit
+
+Testing: -drive if=none -device floppy,drive=none0,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0: [not inserted]
+ Attached to: qdev_id
+ Removable device: not locked, tray closed
+(qemu) quit
+
+Testing: -drive if=none -device ide-cd,drive=none0
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0: [not inserted]
+ Attached to: /machine/peripheral-anon/device[1]
+ Removable device: not locked, tray closed
+(qemu) quit
+
+Testing: -drive if=none -device ide-cd,drive=none0,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0: [not inserted]
+ Attached to: qdev_id
+ Removable device: not locked, tray closed
+(qemu) quit
+
+Testing: -drive if=none -device scsi-cd,drive=none0
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0: [not inserted]
+ Attached to: /machine/peripheral-anon/device[1]
+ Removable device: not locked, tray closed
+(qemu) quit
+
+Testing: -drive if=none -device scsi-cd,drive=none0,id=qdev_id
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+none0: [not inserted]
+ Attached to: qdev_id
+ Removable device: not locked, tray closed
+(qemu) quit
+
+
+=== -drive if=... ===
+
+Testing: -drive if=floppy
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+floppy0: [not inserted]
+ Attached to: /machine/unattached/device[17]
+ Removable device: not locked, tray closed
+(qemu) quit
+
+Testing: -drive if=floppy,driver=null-co
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+floppy0 (NODE_NAME): null-co:// (null-co)
+ Attached to: /machine/unattached/device[17]
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=ide,driver=null-co
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+ide0-hd0 (NODE_NAME): null-co:// (null-co)
+ Attached to: /machine/unattached/device[18]
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=ide,media=cdrom
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+ide0-cd0: [not inserted]
+ Attached to: /machine/unattached/device[18]
+ Removable device: not locked, tray closed
+(qemu) quit
+
+Testing: -drive if=ide,driver=null-co,media=cdrom
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+ide0-cd0 (NODE_NAME): null-co:// (null-co, read-only)
+ Attached to: /machine/unattached/device[18]
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+(qemu) quit
+
+qemu: -drive if=scsi,driver=null-co: warning: bus=0,unit=0 is deprecated with this machine type
+Testing: -drive if=scsi,driver=null-co
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+scsi0-hd0 (NODE_NAME): null-co:// (null-co)
+ Attached to: /machine/unattached/device[27]/scsi.0/legacy[0]
+ Cache mode: writeback
+(qemu) quit
+
+qemu: -drive if=scsi,media=cdrom: warning: bus=0,unit=0 is deprecated with this machine type
+Testing: -drive if=scsi,media=cdrom
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+scsi0-cd0: [not inserted]
+ Attached to: /machine/unattached/device[27]/scsi.0/legacy[0]
+ Removable device: not locked, tray closed
+(qemu) quit
+
+qemu: -drive if=scsi,driver=null-co,media=cdrom: warning: bus=0,unit=0 is deprecated with this machine type
+Testing: -drive if=scsi,driver=null-co,media=cdrom
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+scsi0-cd0 (NODE_NAME): null-co:// (null-co, read-only)
+ Attached to: /machine/unattached/device[27]/scsi.0/legacy[0]
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=virtio,driver=null-co
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+virtio0 (NODE_NAME): null-co:// (null-co)
+ Attached to: /machine/peripheral-anon/device[1]/virtio-backend
+ Cache mode: writeback
+(qemu) quit
+
+Testing: -drive if=pflash,driver=null-co,size=1M
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) info block
+pflash0 (NODE_NAME): json:{"driver": "null-co", "size": "1M"} (null-co)
+ Attached to: /machine/unattached/device[2]
+ Cache mode: writeback
+(qemu) quit
+
+*** done
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
index 318ae74..a6c7e1f 100644
--- a/tests/qemu-iotests/group
+++ b/tests/qemu-iotests/group
@@ -176,3 +176,4 @@
182 rw auto quick
183 rw auto migration
185 rw auto
+186 rw auto
--
1.8.3.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH 9/9] qemu-iotests: Test unplug of -device without drive
2017-07-12 12:57 [Qemu-devel] [PATCH 0/9] block: -device drive=<node-name> fixes Kevin Wolf
` (7 preceding siblings ...)
2017-07-12 12:57 ` [Qemu-devel] [PATCH 8/9] qemu-iotests: Test 'info block' Kevin Wolf
@ 2017-07-12 12:57 ` Kevin Wolf
2017-07-12 16:23 ` Eric Blake
8 siblings, 1 reply; 20+ messages in thread
From: Kevin Wolf @ 2017-07-12 12:57 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, mreitz, eblake, jsnow, pbonzini, armbru, qemu-devel
This caused an assertion failure until recently because the BlockBackend
would be detached on unplug, but was in fact never attached in the first
place. Add a regression test.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
tests/qemu-iotests/067 | 13 +++++++++++++
tests/qemu-iotests/067.out | 39 +++++++++++++++++++++++++++++++++++++++
2 files changed, 52 insertions(+)
diff --git a/tests/qemu-iotests/067 b/tests/qemu-iotests/067
index 38d23fc..5d4ca4b 100755
--- a/tests/qemu-iotests/067
+++ b/tests/qemu-iotests/067
@@ -137,6 +137,19 @@ run_qemu <<EOF
{ "execute": "quit" }
EOF
+echo
+echo === Empty drive with -device and device_del ===
+echo
+
+run_qemu -device virtio-scsi-pci -device scsi-cd,id=cd0 <<EOF
+{ "execute": "qmp_capabilities" }
+{ "execute": "query-block" }
+{ "execute": "device_del", "arguments": { "id": "cd0" } }
+{ "execute": "system_reset" }
+{ "execute": "query-block" }
+{ "execute": "quit" }
+EOF
+
# success, all done
echo "*** done"
rm -f $seq.full
diff --git a/tests/qemu-iotests/067.out b/tests/qemu-iotests/067.out
index e3c4496..bd70557 100644
--- a/tests/qemu-iotests/067.out
+++ b/tests/qemu-iotests/067.out
@@ -416,4 +416,43 @@ Testing:
"return": {
}
}
+
+=== Empty drive with -device and device_del ===
+
+Testing: -device virtio-scsi-pci -device scsi-cd,id=cd0
+{
+ QMP_VERSION
+}
+{
+ "return": {
+ }
+}
+{
+ "return": [
+ {
+ "device": "",
+ "locked": false,
+ "removable": true,
+ "qdev": "cd0",
+ "tray_open": false,
+ "type": "unknown"
+ }
+ ]
+}
+{
+ "return": {
+ }
+}
+{
+ "return": {
+ }
+}
+{
+ "return": [
+ ]
+}
+{
+ "return": {
+ }
+}
*** done
--
1.8.3.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 1/9] block: Make blk_get_attached_dev_id() public
2017-07-12 12:57 ` [Qemu-devel] [PATCH 1/9] block: Make blk_get_attached_dev_id() public Kevin Wolf
@ 2017-07-12 14:53 ` Eric Blake
0 siblings, 0 replies; 20+ messages in thread
From: Eric Blake @ 2017-07-12 14:53 UTC (permalink / raw)
To: Kevin Wolf, qemu-block; +Cc: mreitz, jsnow, pbonzini, armbru, qemu-devel
[-- Attachment #1: Type: text/plain, Size: 418 bytes --]
On 07/12/2017 07:57 AM, Kevin Wolf wrote:
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
> block/block-backend.c | 3 +--
> include/sysemu/block-backend.h | 1 +
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 2/9] block/qapi: Add qdev device name to query-block
2017-07-12 12:57 ` [Qemu-devel] [PATCH 2/9] block/qapi: Add qdev device name to query-block Kevin Wolf
@ 2017-07-12 15:06 ` Eric Blake
0 siblings, 0 replies; 20+ messages in thread
From: Eric Blake @ 2017-07-12 15:06 UTC (permalink / raw)
To: Kevin Wolf, qemu-block; +Cc: mreitz, jsnow, pbonzini, armbru, qemu-devel
[-- Attachment #1: Type: text/plain, Size: 2183 bytes --]
On 07/12/2017 07:57 AM, Kevin Wolf wrote:
> With -blockdev/-device, users can indirectly create anonymous
> BlockBackends, in the state of which they are still interested. As a
Reads awkwardly. Maybe:
BlockBackends, although it is still of interest to learn the state of
such backends.
> preparation for making such BBs visible in query-block, make sure that
> they can be identified even without a name by adding the ID/QOM path of
> their qdev device to BlockInfo.
>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
> +++ b/qapi/block-core.json
> @@ -433,6 +433,9 @@
> #
> # @device: The device name associated with the virtual device.
> #
> +# @qdev: The qdev ID, or if no ID is assigned the QOM path, of the block
s/assigned the QOM path, of/assigned, the QOM path of/
> +# device.
Missing a (since 2.10) tag.
> +#
> # @type: This field is returned only for compatibility reasons, it should
> # not be used (always returns 'unknown')
> #
> @@ -458,7 +461,7 @@
> # Since: 0.14.0
> ##
> { 'struct': 'BlockInfo',
> - 'data': {'device': 'str', 'type': 'str', 'removable': 'bool',
> + 'data': {'device': 'str', '*qdev': 'str', 'type': 'str', 'removable': 'bool',
> 'locked': 'bool', '*inserted': 'BlockDeviceInfo',
> '*tray_open': 'bool', '*io-status': 'BlockDeviceIoStatus',
> '*dirty-bitmaps': ['BlockDirtyInfo'] } }
Besides the testsuite, are there any example outputs that need to be
adjusted?
> diff --git a/tests/qemu-iotests/067.out b/tests/qemu-iotests/067.out
> index 782eae2..e3c4496 100644
> --- a/tests/qemu-iotests/067.out
> +++ b/tests/qemu-iotests/067.out
> @@ -57,6 +57,7 @@ Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,if=none,id=disk -device virti
> "file": "TEST_DIR/t.qcow2",
> "encryption_key_missing": false
> },
> + "qdev": "/machine/peripheral/virtio0/virtio-backend",
> "type": "unknown"
> }
> ]
>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 3/9] block: Make blk_all_next() public
2017-07-12 12:57 ` [Qemu-devel] [PATCH 3/9] block: Make blk_all_next() public Kevin Wolf
@ 2017-07-12 15:25 ` Eric Blake
0 siblings, 0 replies; 20+ messages in thread
From: Eric Blake @ 2017-07-12 15:25 UTC (permalink / raw)
To: Kevin Wolf, qemu-block; +Cc: mreitz, jsnow, pbonzini, armbru, qemu-devel
[-- Attachment #1: Type: text/plain, Size: 546 bytes --]
On 07/12/2017 07:57 AM, Kevin Wolf wrote:
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
> block/block-backend.c | 2 +-
> include/sysemu/block-backend.h | 1 +
> 2 files changed, 2 insertions(+), 1 deletion(-)
Reviewed-by: Eric Blake <eblake@redhat.com>
(although the commit message could mention WHY it is useful to be
public, because of a pending patch that will need it to do XYZ)
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 4/9] block/qapi: Use blk_all_next() for query-block
2017-07-12 12:57 ` [Qemu-devel] [PATCH 4/9] block/qapi: Use blk_all_next() for query-block Kevin Wolf
@ 2017-07-12 15:27 ` Eric Blake
0 siblings, 0 replies; 20+ messages in thread
From: Eric Blake @ 2017-07-12 15:27 UTC (permalink / raw)
To: Kevin Wolf, qemu-block; +Cc: mreitz, jsnow, pbonzini, armbru, qemu-devel
[-- Attachment #1: Type: text/plain, Size: 672 bytes --]
On 07/12/2017 07:57 AM, Kevin Wolf wrote:
> This patch replaces the blk_next() loop in query-block by a
> blk_all_next() one so that we also get access to BlockBackends that
> aren't owned by the monitor. For now, the next thing we do is check
> whether each BB has a name, so there is no semantical difference.
s/semantical/semantic/
>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
> block/qapi.c | 10 ++++++++--
> 1 file changed, 8 insertions(+), 2 deletions(-)
>
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 5/9] block: List anonymous device BBs in query-block
2017-07-12 12:57 ` [Qemu-devel] [PATCH 5/9] block: List anonymous device BBs in query-block Kevin Wolf
@ 2017-07-12 15:47 ` Eric Blake
2017-07-13 11:25 ` Kevin Wolf
0 siblings, 1 reply; 20+ messages in thread
From: Eric Blake @ 2017-07-12 15:47 UTC (permalink / raw)
To: Kevin Wolf, qemu-block; +Cc: mreitz, jsnow, pbonzini, armbru, qemu-devel
[-- Attachment #1: Type: text/plain, Size: 1056 bytes --]
On 07/12/2017 07:57 AM, Kevin Wolf wrote:
> Instead of listing only monitor-owned BlockBackends in query-block, also
> add those anonymous BlockBackends that are owned by a qdev device and as
> such under the control of the user.
>
> This allows to use query-block to inspect BlockBackends for the modern
"allows to VERB" is not idiomatic; better is "allows VERBing" (as in
"allows using query-block"); or "allows SUBJECT to VERB" (as in the
verbose "allows the client to use query-block"). For your particular
wording choice, it is also possible to do "allows the use of
query-block", although that rewrite is not possible for all VERB.
> configuration syntax with -blockdev and -device.
>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
> block/qapi.c | 2 +-
> hmp.c | 8 ++++----
> 2 files changed, 5 insertions(+), 5 deletions(-)
>
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 6/9] ide: bdrv_attach_dev() for empty CD-ROM
2017-07-12 12:57 ` [Qemu-devel] [PATCH 6/9] ide: bdrv_attach_dev() for empty CD-ROM Kevin Wolf
@ 2017-07-12 15:52 ` Eric Blake
0 siblings, 0 replies; 20+ messages in thread
From: Eric Blake @ 2017-07-12 15:52 UTC (permalink / raw)
To: Kevin Wolf, qemu-block; +Cc: mreitz, jsnow, pbonzini, armbru, qemu-devel
[-- Attachment #1: Type: text/plain, Size: 778 bytes --]
On 07/12/2017 07:57 AM, Kevin Wolf wrote:
> If no drive=... option is passed (for an empty drive), we don't only
> lack the BlockBackend normally created by parse_drive(), but we also
> need to manually call blk_attach_dev().
>
> IDE does not support hot unplug, but if it did, qdev would take care to
> call the matching blk_detach_dev() on unplug.
>
> This fixes at least the bug that such devices didn't show up in
> query-block, and probably some more problems.
>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
> hw/ide/qdev.c | 3 +++
> 1 file changed, 3 insertions(+)
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 7/9] scsi-disk: bdrv_attach_dev() for empty CD-ROM
2017-07-12 12:57 ` [Qemu-devel] [PATCH 7/9] scsi-disk: " Kevin Wolf
@ 2017-07-12 15:58 ` Eric Blake
0 siblings, 0 replies; 20+ messages in thread
From: Eric Blake @ 2017-07-12 15:58 UTC (permalink / raw)
To: Kevin Wolf, qemu-block; +Cc: mreitz, jsnow, pbonzini, armbru, qemu-devel
[-- Attachment #1: Type: text/plain, Size: 698 bytes --]
On 07/12/2017 07:57 AM, Kevin Wolf wrote:
> If no drive=... option is passed (for an empty drive), we don't only
> lack the BlockBackend normally created by parse_drive(), but we also
> need to manually call blk_attach_dev().
>
> This fixes at least a segfault when unplugging such devices, the bug
> that they didn't show up in query-block, and probably some more
> problems.
>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
> hw/scsi/scsi-disk.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 8/9] qemu-iotests: Test 'info block'
2017-07-12 12:57 ` [Qemu-devel] [PATCH 8/9] qemu-iotests: Test 'info block' Kevin Wolf
@ 2017-07-12 16:22 ` Eric Blake
0 siblings, 0 replies; 20+ messages in thread
From: Eric Blake @ 2017-07-12 16:22 UTC (permalink / raw)
To: Kevin Wolf, qemu-block; +Cc: mreitz, jsnow, pbonzini, armbru, qemu-devel
[-- Attachment #1: Type: text/plain, Size: 734 bytes --]
On 07/12/2017 07:57 AM, Kevin Wolf wrote:
> This test makes sure that all block devices show up on 'info block',
> with all of the expected information, in different configurations.
>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
> tests/qemu-iotests/186 | 147 ++++++++++++++
> tests/qemu-iotests/186.out | 489 +++++++++++++++++++++++++++++++++++++++++++++
> tests/qemu-iotests/group | 1 +
> 3 files changed, 637 insertions(+)
> create mode 100755 tests/qemu-iotests/186
> create mode 100644 tests/qemu-iotests/186.out
>
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 9/9] qemu-iotests: Test unplug of -device without drive
2017-07-12 12:57 ` [Qemu-devel] [PATCH 9/9] qemu-iotests: Test unplug of -device without drive Kevin Wolf
@ 2017-07-12 16:23 ` Eric Blake
0 siblings, 0 replies; 20+ messages in thread
From: Eric Blake @ 2017-07-12 16:23 UTC (permalink / raw)
To: Kevin Wolf, qemu-block; +Cc: mreitz, jsnow, pbonzini, armbru, qemu-devel
[-- Attachment #1: Type: text/plain, Size: 634 bytes --]
On 07/12/2017 07:57 AM, Kevin Wolf wrote:
> This caused an assertion failure until recently because the BlockBackend
> would be detached on unplug, but was in fact never attached in the first
> place. Add a regression test.
>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
> tests/qemu-iotests/067 | 13 +++++++++++++
> tests/qemu-iotests/067.out | 39 +++++++++++++++++++++++++++++++++++++++
> 2 files changed, 52 insertions(+)
>
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 5/9] block: List anonymous device BBs in query-block
2017-07-12 15:47 ` Eric Blake
@ 2017-07-13 11:25 ` Kevin Wolf
0 siblings, 0 replies; 20+ messages in thread
From: Kevin Wolf @ 2017-07-13 11:25 UTC (permalink / raw)
To: Eric Blake; +Cc: qemu-block, mreitz, jsnow, pbonzini, armbru, qemu-devel
[-- Attachment #1: Type: text/plain, Size: 750 bytes --]
Am 12.07.2017 um 17:47 hat Eric Blake geschrieben:
> On 07/12/2017 07:57 AM, Kevin Wolf wrote:
> > Instead of listing only monitor-owned BlockBackends in query-block, also
> > add those anonymous BlockBackends that are owned by a qdev device and as
> > such under the control of the user.
> >
> > This allows to use query-block to inspect BlockBackends for the modern
>
> "allows to VERB" is not idiomatic; better is "allows VERBing" (as in
> "allows using query-block"); or "allows SUBJECT to VERB" (as in the
> verbose "allows the client to use query-block").
Is this inconsistency a known problem in English or should we file a new
bug report against it? But as long as this isn't fixed yet, I'll apply
your workaround.
Kevin
[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2017-07-13 11:25 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-12 12:57 [Qemu-devel] [PATCH 0/9] block: -device drive=<node-name> fixes Kevin Wolf
2017-07-12 12:57 ` [Qemu-devel] [PATCH 1/9] block: Make blk_get_attached_dev_id() public Kevin Wolf
2017-07-12 14:53 ` Eric Blake
2017-07-12 12:57 ` [Qemu-devel] [PATCH 2/9] block/qapi: Add qdev device name to query-block Kevin Wolf
2017-07-12 15:06 ` Eric Blake
2017-07-12 12:57 ` [Qemu-devel] [PATCH 3/9] block: Make blk_all_next() public Kevin Wolf
2017-07-12 15:25 ` Eric Blake
2017-07-12 12:57 ` [Qemu-devel] [PATCH 4/9] block/qapi: Use blk_all_next() for query-block Kevin Wolf
2017-07-12 15:27 ` Eric Blake
2017-07-12 12:57 ` [Qemu-devel] [PATCH 5/9] block: List anonymous device BBs in query-block Kevin Wolf
2017-07-12 15:47 ` Eric Blake
2017-07-13 11:25 ` Kevin Wolf
2017-07-12 12:57 ` [Qemu-devel] [PATCH 6/9] ide: bdrv_attach_dev() for empty CD-ROM Kevin Wolf
2017-07-12 15:52 ` Eric Blake
2017-07-12 12:57 ` [Qemu-devel] [PATCH 7/9] scsi-disk: " Kevin Wolf
2017-07-12 15:58 ` Eric Blake
2017-07-12 12:57 ` [Qemu-devel] [PATCH 8/9] qemu-iotests: Test 'info block' Kevin Wolf
2017-07-12 16:22 ` Eric Blake
2017-07-12 12:57 ` [Qemu-devel] [PATCH 9/9] qemu-iotests: Test unplug of -device without drive Kevin Wolf
2017-07-12 16:23 ` Eric Blake
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.