Skip to content

x-blockdev-create for protocols and qcow2

Kevin Wolf qemu-devel 4 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v4 Latest37 patches 7 repliesIn review
  2. v336 patches 7 repliesSuperseded
  3. v236 patches 40 repliesSuperseded
Earlier versions · 1
VersionPostedPatchesRepliesStatus
v127 patches41 repliesSuperseded

Changes in v4 from the cover letter

- Rebased on top of a few conflicting series that have hit master meanwhile
- qcow2: Renamed qcow2_create2() to qcow2_co_create() while resolving the conflict from Paolo's series that renamed it to qcow2_co_create2()
- rbd: Further simplified qemu_rbd_mon_host() [Max]

Patches in v4 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/37block/qapi: Introduce BlockdevCreateOptionsqapi/block-core.json+62 -00 replies
2/37block/qapi: Add qcow2 create options to schemaqapi/block-core.json+44 -10 replies
3/37qcow2: Rename qcow2_co_create2() to qcow2_co_create()block/qcow2.c+8 -82 replies
4/37qcow2: Let qcow2_create() handle protocol layerblock/qcow2.c+38 -260 replies
5/37qcow2: Pass BlockdevCreateOptions to qcow2_co_create()block/qcow2.c+151 -381 reply
6/37qcow2: Use BlockdevRef in qcow2_co_create()block.c block/qcow2.c include/block/block.h+73 -140 replies
7/37qcow2: Use QCryptoBlockCreateOptions in qcow2_co_create()block/qcow2.c+45 -170 replies
8/37qcow2: Handle full/falloc preallocation in qcow2_co_create()block/qcow2.c+19 -90 replies
9/37util: Add qemu_opts_to_qdict_filtered()include/qemu/option.h util/qemu-option.c+39 -50 replies
10/37test-qemu-opts: Test qemu_opts_append()tests/test-qemu-opts.c+128 -00 replies
11/37test-qemu-opts: Test qemu_opts_to_qdict_filtered()tests/test-qemu-opts.c+125 -00 replies
12/37qdict: Introduce qdict_rename_keys()include/qapi/qmp/qdict.h qobject/qdict.c tests/check-qdict.c+169 -00 replies
13/37qcow2: Use visitor for options in qcow2_create()block/qcow2.c tests/qemu-iotests/049.out tests/qemu-iotests/112.out+84 -1460 replies
14/37block: Make bdrv_is_whitelisted() publicblock.c include/block/block.h+2 -10 replies
15/37block: x-blockdev-create QMP commandblock/Makefile.objs block/create.c block/qcow2.c +2 more+94 -20 replies
16/37file-posix: Support .bdrv_co_createblock/file-posix.c qapi/block-core.json+75 -240 replies
17/37file-win32: Support .bdrv_co_createblock/file-win32.c+38 -90 replies
18/37gluster: Support .bdrv_co_createblock/gluster.c qapi/block-core.json+108 -450 replies
19/37rbd: Fix use after free in qemu_rbd_set_keypairs() error pathblock/rbd.c+2 -10 replies
20/37rbd: Factor out qemu_rbd_connect()block/rbd.c+60 -400 replies
21/37rbd: Remove non-schema options from runtime_optsblock/rbd.c+24 -310 replies
22/37rbd: Pass BlockdevOptionsRbd to qemu_rbd_connect()block/rbd.c+55 -601 reply
23/37rbd: Support .bdrv_co_createblock/rbd.c qapi/block-core.json+118 -510 replies
24/37rbd: Assign s->snap/image_name in qemu_rbd_open()block/rbd.c+5 -90 replies
25/37rbd: Use qemu_rbd_connect() in qemu_rbd_do_create()block/rbd.c+10 -440 replies
26/37nfs: Use QAPI options in nfs_client_open()block/nfs.c+53 -1230 replies
27/37nfs: Support .bdrv_co_createblock/nfs.c qapi/block-core.json+75 -170 replies
28/37sheepdog: QAPIfy "redundancy" create optionblock/sheepdog.c qapi/block-core.json+112 -270 replies
29/37sheepdog: Support .bdrv_co_createblock/sheepdog.c qapi/block-core.json+192 -750 replies
30/37ssh: Use QAPI BlockdevOptionsSsh objectblock/ssh.c+62 -750 replies
31/37ssh: QAPIfy host-key-check optionblock/ssh.c qapi/block-core.json+117 -340 replies
32/37ssh: Pass BlockdevOptionsSsh to connect_to_ssh()block/ssh.c+21 -130 replies
33/37ssh: Support .bdrv_co_createblock/ssh.c qapi/block-core.json+63 -361 reply
34/37file-posix: Fix no-op bdrv_truncate() with falloc preallocationblock/file-posix.c+9 -50 replies
35/37block: Fail bdrv_truncate() with negative sizeblock.c+5 -00 replies
36/37qemu-iotests: Test qcow2 over file image creation with QMPtests/qemu-iotests/206 tests/qemu-iotests/206.out tests/qemu-iotests/group+646 -00 replies
37/37qemu-iotests: Test ssh image creation over QMPtests/qemu-iotests/207 tests/qemu-iotests/207.out tests/qemu-iotests/group+337 -00 replies

Reviews trailers per patch

All 37 patches have a Reviewed-by or Acked-by.

PatchEric BlakeMax Reitz
1/37R-b R-b
2/37R-b R-b
3/37R-b R-b
4/37R-b R-b
5/37R-b R-b
6/37R-b R-b
7/37R-b R-b
8/37R-b R-b
9/37R-b R-b
10/37R-b R-b
11/37R-b R-b
12/37R-b R-b
13/37R-b R-b
14/37R-b R-b
15/37R-b R-b
16/37R-b R-b
17/37R-b R-b
18/37R-b R-b
19/37R-b R-b
20/37R-b
21/37R-b
22/37R-b
23/37R-b
24/37R-b
25/37R-b
26/37R-b
27/37R-b
28/37R-b
29/37R-b
30/37R-b
31/37R-b
32/37R-b
33/37R-b
34/37R-b R-b
35/37R-b R-b
36/37R-b
37/37R-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v4 thread

Cover letter [Qemu-devel] [PATCH v4 00/37] x-blockdev-create for protocols and qcow2

This series implements a minimal QMP command that allows to create an image file on the protocol level or an image format on a given block node.

Eventually, the interface is going to change to some kind of an async command (possibly a (non-)block job), but that will require more work on the job infrastructure first, so let's first QAPIfy image creation in the block drivers. In this series, I'm going for a synchronous command that is prefixed with x- for now.

This series converts qcow2 and all protocol drivers that allow an actual image creation. This means that drivers which only check if the already existing storage is good enough are not converted (e.g. host_device, iscsi). The old behaviour was useful because 'qemu-img create' wants to create both protocol and format layer, but with the separation in QMP, you can just leave out the protocol layer creation when the device already exists.

Please note that for some of the protocol drivers (gluster, rbd and sheepdog) I don't have a test setup ready. For those, I only tested with a fake server address to check that the option are parsed correctly up to this point and an appropriate error is returned without crashing.

If you are a maintainer of one of these protocols and you are interested in keeping image creation working for your protocol, you probably want to test this series on a real setup and give me some feedback. If you don't, I'll just merge the patches and hope that they won't break anything.

v4:
- Rebased on top of a few conflicting series that have hit master meanwhile
- qcow2: Renamed qcow2_create2() to qcow2_co_create() while resolving the conflict from Paolo's series that renamed it to qcow2_co_create2()
- rbd: Further simplified qemu_rbd_mon_host() [Max]

git-backport-diff compared to v3:

Key:
[----] : patches are identical
[####] : number of functional differences between upstream/downstream patch [down] : patch is downstream-only
The flags [FC] indicate (F)unctional and (C)ontextual differences, respectively

001/37:[----] [--] 'block/qapi: Introduce BlockdevCreateOptions' 002/37:[----] [--] 'block/qapi: Add qcow2 create options to schema' 003/37:[down] 'qcow2: Rename qcow2_co_create2() to qcow2_co_create()'

	-> this one is actually new

004/37:[0012] [FC] 'qcow2: Let qcow2_create() handle protocol layer' 005/37:[down] 'qcow2: Pass BlockdevCreateOptions to qcow2_co_create()' 006/37:[down] 'qcow2: Use BlockdevRef in qcow2_co_create()' 007/37:[down] 'qcow2: Use QCryptoBlockCreateOptions in qcow2_co_create()' 008/37:[down] 'qcow2: Handle full/falloc preallocation in qcow2_co_create()'

	-> just rebase with subject line changes

009/37:[----] [--] 'util: Add qemu_opts_to_qdict_filtered()' 010/37:[----] [--] 'test-qemu-opts: Test qemu_opts_append()' 011/37:[----] [--] 'test-qemu-opts: Test qemu_opts_to_qdict_filtered()' 012/37:[----] [--] 'qdict: Introduce qdict_rename_keys()' 013/37:[0005] [FC] 'qcow2: Use visitor for options in qcow2_create()' 014/37:[----] [--] 'block: Make bdrv_is_whitelisted() public' 015/37:[0011] [FC] 'block: x-blockdev-create QMP command' 016/37:[0006] [FC] 'file-posix: Support .bdrv_co_create'
017/37:[0006] [FC] 'file-win32: Support .bdrv_co_create'
018/37:[0018] [FC] 'gluster: Support .bdrv_co_create'
019/37:[----] [--] 'rbd: Fix use after free in qemu_rbd_set_keypairs() error path' 020/37:[----] [--] 'rbd: Factor out qemu_rbd_connect()'
021/37:[----] [--] 'rbd: Remove non-schema options from runtime_opts' 022/37:[0008] [FC] 'rbd: Pass BlockdevOptionsRbd to qemu_rbd_connect()' 023/37:[0022] [FC] 'rbd: Support .bdrv_co_create'
024/37:[----] [--] 'rbd: Assign s->snap/image_name in qemu_rbd_open()' 025/37:[----] [--] 'rbd: Use qemu_rbd_connect() in qemu_rbd_do_create()' 026/37:[----] [-C] 'nfs: Use QAPI options in nfs_client_open()' 027/37:[0006] [FC] 'nfs: Support .bdrv_co_create'
028/37:[----] [-C] 'sheepdog: QAPIfy "redundancy" create option' 029/37:[0009] [FC] 'sheepdog: Support .bdrv_co_create'
030/37:[0001] [FC] 'ssh: Use QAPI BlockdevOptionsSsh object' 031/37:[----] [--] 'ssh: QAPIfy host-key-check option'
032/37:[----] [-C] 'ssh: Pass BlockdevOptionsSsh to connect_to_ssh()' 033/37:[0035] [FC] 'ssh: Support .bdrv_co_create'
034/37:[----] [--] 'file-posix: Fix no-op bdrv_truncate() with falloc preallocation' 035/37:[----] [--] 'block: Fail bdrv_truncate() with negative size' 036/37:[----] [--] 'qemu-iotests: Test qcow2 over file image creation with QMP' 037/37:[----] [--] 'qemu-iotests: Test ssh image creation over QMP'Key:

Kevin Wolf (37):
block/qapi: Introduce BlockdevCreateOptions block/qapi: Add qcow2 create options to schema
qcow2: Rename qcow2_co_create2() to qcow2_co_create()
qcow2: Let qcow2_create() handle protocol layer
qcow2: Pass BlockdevCreateOptions to qcow2_co_create()
qcow2: Use BlockdevRef in qcow2_co_create()
qcow2: Use QCryptoBlockCreateOptions in qcow2_co_create()
qcow2: Handle full/falloc preallocation in qcow2_co_create()
util: Add qemu_opts_to_qdict_filtered()
test-qemu-opts: Test qemu_opts_append()
test-qemu-opts: Test qemu_opts_to_qdict_filtered()
qdict: Introduce qdict_rename_keys()
qcow2: Use visitor for options in qcow2_create()
block: Make bdrv_is_whitelisted() public
block: x-blockdev-create QMP command
file-posix: Support .bdrv_co_create
file-win32: Support .bdrv_co_create
gluster: Support .bdrv_co_create
rbd: Fix use after free in qemu_rbd_set_keypairs() error path
rbd: Factor out qemu_rbd_connect()
rbd: Remove non-schema options from runtime_opts
rbd: Pass BlockdevOptionsRbd to qemu_rbd_connect()
rbd: Support .bdrv_co_create
rbd: Assign s->snap/image_name in qemu_rbd_open()
rbd: Use qemu_rbd_connect() in qemu_rbd_do_create()
nfs: Use QAPI options in nfs_client_open()
nfs: Support .bdrv_co_create
sheepdog: QAPIfy "redundancy" create option
sheepdog: Support .bdrv_co_create
ssh: Use QAPI BlockdevOptionsSsh object
ssh: QAPIfy host-key-check option
ssh: Pass BlockdevOptionsSsh to connect_to_ssh()
ssh: Support .bdrv_co_create
file-posix: Fix no-op bdrv_truncate() with falloc preallocation
block: Fail bdrv_truncate() with negative size
qemu-iotests: Test qcow2 over file image creation with QMP
qemu-iotests: Test ssh image creation over QMP

 qapi/block-core.json       | 326 ++++++++++++++++++++++++++++++++-
 include/block/block.h      |   2 +
 include/block/block_int.h  |   5 +-
 include/qapi/qmp/qdict.h   |   6 +
 include/qemu/option.h      |   2 +
 block.c                    |  54 +++++-
 block/create.c             |  76 ++++++++
 block/file-posix.c         |  93 +++++++---
 block/file-win32.c         |  47 ++++-
 block/gluster.c            | 135 +++++++++-----
 block/nfs.c                | 238 +++++++++++--------------
 block/qcow2.c              | 383 +++++++++++++++++++++++++--------------
 block/rbd.c                | 397 ++++++++++++++++++++++-------------------
 block/sheepdog.c           | 321 +++++++++++++++++++++++----------
 block/ssh.c                | 290 ++++++++++++++++--------------
 qobject/qdict.c            |  34 ++++
 tests/check-qdict.c        | 129 ++++++++++++++
 tests/test-qemu-opts.c     | 253 ++++++++++++++++++++++++++
 util/qemu-option.c         |  42 ++++-
 block/Makefile.objs        |   2 +-
 tests/qemu-iotests/049.out |   8 +-
 tests/qemu-iotests/112.out |   4 +-
 tests/qemu-iotests/206     | 436 +++++++++++++++++++++++++++++++++++++++++++++
 tests/qemu-iotests/206.out | 209 ++++++++++++++++++++++
 tests/qemu-iotests/207     | 261 +++++++++++++++++++++++++++
 tests/qemu-iotests/207.out |  75 ++++++++
 tests/qemu-iotests/group   |   2 +
 27 files changed, 3056 insertions(+), 774 deletions(-)
 create mode 100644 block/create.c
 create mode 100755 tests/qemu-iotests/206
 create mode 100644 tests/qemu-iotests/206.out
 create mode 100755 tests/qemu-iotests/207
 create mode 100644 tests/qemu-iotests/207.out
Signature · 1 line
2.13.6