[Qemu-devel] [PATCH v2 0/9] block: -device drive=<node-name> fixes

Kevin Wolf posted 9 patches 6 years, 9 months ago
Failed in applying to current master (apply log)
Test FreeBSD passed
Test checkpatch passed
Test docker passed
Test s390x passed
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           |   9 +-
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, 735 insertions(+), 10 deletions(-)
create mode 100755 tests/qemu-iotests/186
create mode 100644 tests/qemu-iotests/186.out
[Qemu-devel] [PATCH v2 0/9] block: -device drive=<node-name> fixes
Posted by Kevin Wolf 6 years, 9 months ago
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.

v2:
- Updated example QMP outputs in schema comments [Eric]
- Added missing "since" tag in schema [Eric]
- Improved some commit messages [Eric]

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           |   9 +-
 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, 735 insertions(+), 10 deletions(-)
 create mode 100755 tests/qemu-iotests/186
 create mode 100644 tests/qemu-iotests/186.out

-- 
1.8.3.1


Re: [Qemu-devel] [PATCH v2 0/9] block: -device drive=<node-name> fixes
Posted by John Snow 6 years, 9 months ago

On 07/13/2017 07:41 AM, Kevin Wolf wrote:
> 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.
> 
> v2:
> - Updated example QMP outputs in schema comments [Eric]
> - Added missing "since" tag in schema [Eric]
> - Improved some commit messages [Eric]
> 
> 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

oops...

>   scsi-disk: bdrv_attach_dev() for empty CD-ROM

Well, at least I'm in good company.

>   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           |   9 +-
>  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, 735 insertions(+), 10 deletions(-)
>  create mode 100755 tests/qemu-iotests/186
>  create mode 100644 tests/qemu-iotests/186.out
> 

Series:

Reviewed-by: John Snow <jsnow@redhat.com>

Re: [Qemu-devel] [PATCH v2 0/9] block: -device drive=<node-name> fixes
Posted by Kevin Wolf 6 years, 9 months ago
Am 13.07.2017 um 13:41 hat Kevin Wolf geschrieben:
> 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.

Applied to the block branch.

Kevin