summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Armbruster <armbru@redhat.com>2017-03-21 17:53:28 +0100
committerMarkus Armbruster <armbru@redhat.com>2017-03-28 15:23:23 +0200
commit79b7a77eda5118f2661d251820d5ee9ee080354a (patch)
tree81957b65024816fbb0a9750d0693b65cdb9655e2
parent0491c221547a38b58e41fade9953cd1cf015288b (diff)
downloadqemu-79b7a77eda5118f2661d251820d5ee9ee080354a.tar.gz
block: Declare blockdev-add and blockdev-del supported
It's been a long journey, but here we are. The supported blockdev-add is not compatible to its experimental predecessors; bump all Since: tags to 2.9. x-blockdev-remove-medium, x-blockdev-insert-medium and x-blockdev-change need a bit more work, so leave them alone for now. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
-rw-r--r--blockdev.c4
-rw-r--r--qapi/block-core.json95
-rw-r--r--tests/qemu-iotests/1398
-rwxr-xr-xtests/qemu-iotests/1414
-rwxr-xr-xtests/qemu-iotests/1472
5 files changed, 47 insertions, 66 deletions
diff --git a/blockdev.c b/blockdev.c
index c5b2c2c209..040c152512 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -2835,7 +2835,7 @@ void hmp_drive_del(Monitor *mon, const QDict *qdict)
bs = bdrv_find_node(id);
if (bs) {
- qmp_x_blockdev_del(id, &local_err);
+ qmp_blockdev_del(id, &local_err);
if (local_err) {
error_report_err(local_err);
}
@@ -3900,7 +3900,7 @@ fail:
visit_free(v);
}
-void qmp_x_blockdev_del(const char *node_name, Error **errp)
+void qmp_blockdev_del(const char *node_name, Error **errp)
{
AioContext *aio_context;
BlockDriverState *bs;
diff --git a/qapi/block-core.json b/qapi/block-core.json
index 0f132fc995..f938316596 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -2053,7 +2053,7 @@
# @ignore: Ignore the request
# @unmap: Forward as an unmap request
#
-# Since: 1.7
+# Since: 2.9
##
{ 'enum': 'BlockdevDiscardOptions',
'data': [ 'ignore', 'unmap' ] }
@@ -2082,7 +2082,7 @@
# @threads: Use qemu's thread pool
# @native: Use native AIO backend (only Linux and Windows)
#
-# Since: 1.7
+# Since: 2.9
##
{ 'enum': 'BlockdevAioOptions',
'data': [ 'threads', 'native' ] }
@@ -2097,7 +2097,7 @@
# @no-flush: ignore any flush requests for the device (default:
# false)
#
-# Since: 1.7
+# Since: 2.9
##
{ 'struct': 'BlockdevCacheOptions',
'data': { '*direct': 'bool',
@@ -2108,18 +2108,7 @@
#
# Drivers that are supported in block device operations.
#
-# @host_device: Since 2.1
-# @host_cdrom: Since 2.1
-# @gluster: Since 2.7
-# @nbd: Since 2.8
-# @nfs: Since 2.8
-# @replication: Since 2.8
-# @ssh: Since 2.8
-# @iscsi: Since 2.9
-# @rbd: Since 2.9
-# @sheepdog: Since 2.9
-#
-# Since: 2.0
+# Since: 2.9
##
{ 'enum': 'BlockdevDriver',
'data': [ 'blkdebug', 'blkverify', 'bochs', 'cloop',
@@ -2137,7 +2126,7 @@
# @filename: path to the image file
# @aio: AIO backend (default: threads) (since: 2.8)
#
-# Since: 1.7
+# Since: 2.9
##
{ 'struct': 'BlockdevOptionsFile',
'data': { 'filename': 'str',
@@ -2153,7 +2142,7 @@
# requests. Default to zero which completes requests immediately.
# (Since 2.4)
#
-# Since: 2.2
+# Since: 2.9
##
{ 'struct': 'BlockdevOptionsNull',
'data': { '*size': 'int', '*latency-ns': 'uint64' } }
@@ -2173,7 +2162,7 @@
# (since 2.4)
# @rw: whether to allow write operations (default: false)
#
-# Since: 1.7
+# Since: 2.9
##
{ 'struct': 'BlockdevOptionsVVFAT',
'data': { 'dir': 'str', '*fat-type': 'int', '*floppy': 'bool',
@@ -2187,7 +2176,7 @@
#
# @file: reference to or definition of the data source block device
#
-# Since: 1.7
+# Since: 2.9
##
{ 'struct': 'BlockdevOptionsGenericFormat',
'data': { 'file': 'BlockdevRef' } }
@@ -2201,7 +2190,7 @@
# the decryption key (since 2.6). Mandatory except when
# doing a metadata-only probe of the image.
#
-# Since: 2.6
+# Since: 2.9
##
{ 'struct': 'BlockdevOptionsLUKS',
'base': 'BlockdevOptionsGenericFormat',
@@ -2219,7 +2208,7 @@
# allowed to pass an empty string here in order to disable the
# default backing file.
#
-# Since: 1.7
+# Since: 2.9
##
{ 'struct': 'BlockdevOptionsGenericCOWFormat',
'base': 'BlockdevOptionsGenericFormat',
@@ -2240,7 +2229,7 @@
#
# @all: Perform all available overlap checks
#
-# Since: 2.2
+# Since: 2.9
##
{ 'enum': 'Qcow2OverlapCheckMode',
'data': [ 'none', 'constant', 'cached', 'all' ] }
@@ -2255,7 +2244,7 @@
# @template: Specifies a template mode which can be adjusted using the other
# flags, defaults to 'cached'
#
-# Since: 2.2
+# Since: 2.9
##
{ 'struct': 'Qcow2OverlapCheckFlags',
'data': { '*template': 'Qcow2OverlapCheckMode',
@@ -2279,7 +2268,7 @@
#
# @mode: named mode which chooses a specific set of flags
#
-# Since: 2.2
+# Since: 2.9
##
{ 'alternate': 'Qcow2OverlapChecks',
'data': { 'flags': 'Qcow2OverlapCheckFlags',
@@ -2320,7 +2309,7 @@
# caches. The interval is in seconds. The default value
# is 0 and it disables this feature (since 2.5)
#
-# Since: 1.7
+# Since: 2.9
##
{ 'struct': 'BlockdevOptionsQcow2',
'base': 'BlockdevOptionsGenericCOWFormat',
@@ -2347,7 +2336,7 @@
#
# TODO: Expose the host_key_check option in QMP
#
-# Since: 2.8
+# Since: 2.9
##
{ 'struct': 'BlockdevOptionsSsh',
'data': { 'server': 'InetSocketAddress',
@@ -2360,7 +2349,7 @@
#
# Trigger events supported by blkdebug.
#
-# Since: 2.0
+# Since: 2.9
##
{ 'enum': 'BlkdebugEvent', 'prefix': 'BLKDBG',
'data': [ 'l1_update', 'l1_grow_alloc_table', 'l1_grow_write_table',
@@ -2400,7 +2389,7 @@
#
# @immediately: fail immediately; defaults to false
#
-# Since: 2.0
+# Since: 2.9
##
{ 'struct': 'BlkdebugInjectErrorOptions',
'data': { 'event': 'BlkdebugEvent',
@@ -2423,7 +2412,7 @@
# @new_state: the state identifier blkdebug is supposed to assume if
# this event is triggered
#
-# Since: 2.0
+# Since: 2.9
##
{ 'struct': 'BlkdebugSetStateOptions',
'data': { 'event': 'BlkdebugEvent',
@@ -2446,7 +2435,7 @@
#
# @set-state: array of state-change descriptions
#
-# Since: 2.0
+# Since: 2.9
##
{ 'struct': 'BlockdevOptionsBlkdebug',
'data': { 'image': 'BlockdevRef',
@@ -2464,7 +2453,7 @@
#
# @raw: raw image used for verification
#
-# Since: 2.0
+# Since: 2.9
##
{ 'struct': 'BlockdevOptionsBlkverify',
'data': { 'test': 'BlockdevRef',
@@ -2479,7 +2468,7 @@
#
# @fifo: read only from the first child that has not failed
#
-# Since: 2.2
+# Since: 2.9
##
{ 'enum': 'QuorumReadPattern', 'data': [ 'quorum', 'fifo' ] }
@@ -2501,7 +2490,7 @@
# @read-pattern: choose read pattern and set to quorum by default
# (Since 2.2)
#
-# Since: 2.0
+# Since: 2.9
##
{ 'struct': 'BlockdevOptionsQuorum',
'data': { '*blkverify': 'bool',
@@ -2526,7 +2515,7 @@
#
# @logfile: libgfapi log file (default /dev/stderr) (Since 2.8)
#
-# Since: 2.7
+# Since: 2.9
##
{ 'struct': 'BlockdevOptionsGluster',
'data': { 'volume': 'str',
@@ -2685,7 +2674,7 @@
#
# @secondary: Secondary mode, receive the vm's state from primary QEMU.
#
-# Since: 2.8
+# Since: 2.9
##
{ 'enum' : 'ReplicationMode', 'data' : [ 'primary', 'secondary' ] }
@@ -2700,7 +2689,7 @@
# node who owns the replication node chain. Must not be given in
# primary mode.
#
-# Since: 2.8
+# Since: 2.9
##
{ 'struct': 'BlockdevOptionsReplication',
'base': 'BlockdevOptionsGenericFormat',
@@ -2714,7 +2703,7 @@
#
# @inet: TCP transport
#
-# Since: 2.8
+# Since: 2.9
##
{ 'enum': 'NFSTransport',
'data': [ 'inet' ] }
@@ -2728,7 +2717,7 @@
#
# @host: host address for NFS server
#
-# Since: 2.8
+# Since: 2.9
##
{ 'struct': 'NFSServer',
'data': { 'type': 'NFSTransport',
@@ -2763,7 +2752,7 @@
# @debug: set the NFS debug level (max 2) (defaults
# to libnfs default)
#
-# Since: 2.8
+# Since: 2.9
##
{ 'struct': 'BlockdevOptionsNfs',
'data': { 'server': 'NFSServer',
@@ -2782,7 +2771,7 @@
#
# @filename: path to the image file
#
-# Since: 1.7
+# Since: 2.9
##
{ 'struct': 'BlockdevOptionsCurl',
'data': { 'filename': 'str' } }
@@ -2798,7 +2787,7 @@
#
# @tls-creds: TLS credentials ID
#
-# Since: 2.8
+# Since: 2.9
##
{ 'struct': 'BlockdevOptionsNbd',
'data': { 'server': 'SocketAddress',
@@ -2813,7 +2802,7 @@
# @offset: position where the block device starts
# @size: the assumed size of the device
#
-# Since: 2.8
+# Since: 2.9
##
{ 'struct': 'BlockdevOptionsRaw',
'base': 'BlockdevOptionsGenericFormat',
@@ -2837,7 +2826,7 @@
#
# Remaining options are determined by the block driver.
#
-# Since: 1.7
+# Since: 2.9
##
{ 'union': 'BlockdevOptions',
'base': { 'driver': 'BlockdevDriver',
@@ -2894,7 +2883,7 @@
# empty string means that no block device should be
# referenced.
#
-# Since: 1.7
+# Since: 2.9
##
{ 'alternate': 'BlockdevRef',
'data': { 'definition': 'BlockdevOptions',
@@ -2907,11 +2896,7 @@
# BlockBackend will be created; otherwise, @node-name is mandatory at the top
# level and no BlockBackend will be created.
#
-# Note: This command is still a work in progress. It doesn't support all
-# block drivers among other things. Stay away from it unless you want
-# to help with its development.
-#
-# Since: 1.7
+# Since: 2.9
#
# Example:
#
@@ -2957,7 +2942,7 @@
{ 'command': 'blockdev-add', 'data': 'BlockdevOptions', 'boxed': true }
##
-# @x-blockdev-del:
+# @blockdev-del:
#
# Deletes a block device that has been added using blockdev-add.
# The command will fail if the node is attached to a device or is
@@ -2965,11 +2950,7 @@
#
# @node-name: Name of the graph node to delete.
#
-# Note: This command is still a work in progress and is considered
-# experimental. Stay away from it unless you want to help with its
-# development.
-#
-# Since: 2.5
+# Since: 2.9
#
# Example:
#
@@ -2985,13 +2966,13 @@
# }
# <- { "return": {} }
#
-# -> { "execute": "x-blockdev-del",
+# -> { "execute": "blockdev-del",
# "arguments": { "node-name": "node0" }
# }
# <- { "return": {} }
#
##
-{ 'command': 'x-blockdev-del', 'data': { 'node-name': 'str' } }
+{ 'command': 'blockdev-del', 'data': { 'node-name': 'str' } }
##
# @blockdev-open-tray:
diff --git a/tests/qemu-iotests/139 b/tests/qemu-iotests/139
index 6d98e4f879..175d8f0008 100644
--- a/tests/qemu-iotests/139
+++ b/tests/qemu-iotests/139
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Test cases for the QMP 'x-blockdev-del' command
+# Test cases for the QMP 'blockdev-del' command
#
# Copyright (C) 2015 Igalia, S.L.
# Author: Alberto Garcia <berto@igalia.com>
@@ -79,7 +79,7 @@ class TestBlockdevDel(iotests.QMPTestCase):
# Delete a BlockDriverState
def delBlockDriverState(self, node, expect_error = False):
self.checkBlockDriverState(node)
- result = self.vm.qmp('x-blockdev-del', node_name = node)
+ result = self.vm.qmp('blockdev-del', node_name = node)
if expect_error:
self.assert_qmp(result, 'error/class', 'GenericError')
else:
@@ -173,7 +173,7 @@ class TestBlockdevDel(iotests.QMPTestCase):
self.wait_until_completed(id)
# Add a BlkDebug node
- # Note that the purpose of this is to test the x-blockdev-del
+ # Note that the purpose of this is to test the blockdev-del
# sanity checks, not to create a usable blkdebug drive
def addBlkDebug(self, debug, node):
self.checkBlockDriverState(node, False)
@@ -191,7 +191,7 @@ class TestBlockdevDel(iotests.QMPTestCase):
self.checkBlockDriverState(debug)
# Add a BlkVerify node
- # Note that the purpose of this is to test the x-blockdev-del
+ # Note that the purpose of this is to test the blockdev-del
# sanity checks, not to create a usable blkverify drive
def addBlkVerify(self, blkverify, test, raw):
self.checkBlockDriverState(test, False)
diff --git a/tests/qemu-iotests/141 b/tests/qemu-iotests/141
index 6d8f0a1a84..27fb1cc92c 100755
--- a/tests/qemu-iotests/141
+++ b/tests/qemu-iotests/141
@@ -65,7 +65,7 @@ test_blockjob()
# We want this to return an error because the block job is still running
_send_qemu_cmd $QEMU_HANDLE \
- "{'execute': 'x-blockdev-del',
+ "{'execute': 'blockdev-del',
'arguments': {'node-name': 'drv0'}}" \
'error' | _filter_generated_node_ids
@@ -75,7 +75,7 @@ test_blockjob()
"$3"
_send_qemu_cmd $QEMU_HANDLE \
- "{'execute': 'x-blockdev-del',
+ "{'execute': 'blockdev-del',
'arguments': {'node-name': 'drv0'}}" \
'return'
}
diff --git a/tests/qemu-iotests/147 b/tests/qemu-iotests/147
index 45469c911e..cca75c562c 100755
--- a/tests/qemu-iotests/147
+++ b/tests/qemu-iotests/147
@@ -57,7 +57,7 @@ class NBDBlockdevAddBase(iotests.QMPTestCase):
filename)
break
- result = self.vm.qmp('x-blockdev-del', node_name='nbd-blockdev')
+ result = self.vm.qmp('blockdev-del', node_name='nbd-blockdev')
self.assert_qmp(result, 'return', {})