summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Reitz2015-12-11 16:23:05 +0100
committerPeter Maydell2015-12-11 16:39:29 +0100
commit6e0abc251dd4f8eba1f53656dfede12e5840e83b (patch)
tree807cf36d47b1f459d1a86e895dadb9f55f5973b2
parentFix xbzrle vs last_sent_block update (diff)
downloadqemu-6e0abc251dd4f8eba1f53656dfede12e5840e83b.tar.gz
qemu-6e0abc251dd4f8eba1f53656dfede12e5840e83b.tar.xz
qemu-6e0abc251dd4f8eba1f53656dfede12e5840e83b.zip
blockdev: Mark {insert, remove}-medium experimental
While in the long term we want throttling to be its own block filter BDS, in the short term we want it to be part of the BB instead of a BDS; even in the long term we may want legacy throttling to be automatically tied to the BB. blockdev-insert-medium and blockdev-remove-medium do not retain throttling information in the BB (deliberately so). Therefore, using them means tying this information to a BDS, which would break the model described above. (The same applies to other flags such as detect_zeroes.) We probably want to move this information to the BB or its own filter BDS before blockdev-{insert,remove}-medium can be considered completely stable. Therefore, mark these functions experimental for the time being. Suggested-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Max Reitz <mreitz@redhat.com> Acked-by: Markus Armbruster <armbru@redhat.com> Acked-by: Kevin Wolf <kwolf@redhat.com> Message-id: 1449847385-13986-2-git-send-email-mreitz@redhat.com Reviewed-by: Eric Blake <eblake@redhat.com> [PMM: fixed format nit (underlining) in qmp-commands.hx] Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r--blockdev.c10
-rw-r--r--qapi/block-core.json18
-rw-r--r--qmp-commands.hx28
-rwxr-xr-xtests/qemu-iotests/11820
-rw-r--r--tests/qemu-iotests/1392
5 files changed, 45 insertions, 33 deletions
diff --git a/blockdev.c b/blockdev.c
index 313841b0b4..80932e8d8d 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -2257,7 +2257,7 @@ void qmp_eject(const char *device, bool has_force, bool force, Error **errp)
return;
}
- qmp_blockdev_remove_medium(device, errp);
+ qmp_x_blockdev_remove_medium(device, errp);
}
void qmp_block_passwd(bool has_device, const char *device,
@@ -2343,7 +2343,7 @@ void qmp_blockdev_close_tray(const char *device, Error **errp)
blk_dev_change_media_cb(blk, true);
}
-void qmp_blockdev_remove_medium(const char *device, Error **errp)
+void qmp_x_blockdev_remove_medium(const char *device, Error **errp)
{
BlockBackend *blk;
BlockDriverState *bs;
@@ -2430,8 +2430,8 @@ static void qmp_blockdev_insert_anon_medium(const char *device,
QTAILQ_INSERT_TAIL(&bdrv_states, bs, device_list);
}
-void qmp_blockdev_insert_medium(const char *device, const char *node_name,
- Error **errp)
+void qmp_x_blockdev_insert_medium(const char *device, const char *node_name,
+ Error **errp)
{
BlockDriverState *bs;
@@ -2520,7 +2520,7 @@ void qmp_blockdev_change_medium(const char *device, const char *filename,
goto fail;
}
- qmp_blockdev_remove_medium(device, &err);
+ qmp_x_blockdev_remove_medium(device, &err);
if (err) {
error_propagate(errp, err);
goto fail;
diff --git a/qapi/block-core.json b/qapi/block-core.json
index a07b13f54a..5a23165dfa 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -2081,7 +2081,7 @@
'data': { 'device': 'str' } }
##
-# @blockdev-remove-medium:
+# @x-blockdev-remove-medium:
#
# Removes a medium (a block driver state tree) from a block device. That block
# device's tray must currently be open (unless there is no attached guest
@@ -2089,27 +2089,33 @@
#
# If the tray is open and there is no medium inserted, this will be a no-op.
#
+# This command is still a work in progress and is considered experimental.
+# Stay away from it unless you want to help with its development.
+#
# @device: block device name
#
# Since: 2.5
##
-{ 'command': 'blockdev-remove-medium',
+{ 'command': 'x-blockdev-remove-medium',
'data': { 'device': 'str' } }
##
-# @blockdev-insert-medium:
+# @x-blockdev-insert-medium:
#
# Inserts a medium (a block driver state tree) into a block device. That block
# device's tray must currently be open (unless there is no attached guest
# device) and there must be no medium inserted already.
#
+# This command is still a work in progress and is considered experimental.
+# Stay away from it unless you want to help with its development.
+#
# @device: block device name
#
# @node-name: name of a node in the block driver state graph
#
# Since: 2.5
##
-{ 'command': 'blockdev-insert-medium',
+{ 'command': 'x-blockdev-insert-medium',
'data': { 'device': 'str',
'node-name': 'str'} }
@@ -2137,8 +2143,8 @@
#
# Changes the medium inserted into a block device by ejecting the current medium
# and loading a new image file which is inserted as the new medium (this command
-# combines blockdev-open-tray, blockdev-remove-medium, blockdev-insert-medium
-# and blockdev-close-tray).
+# combines blockdev-open-tray, x-blockdev-remove-medium,
+# x-blockdev-insert-medium and blockdev-close-tray).
#
# @device: block device name
#
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 9d8b42f59a..20a92f9985 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -4203,27 +4203,30 @@ Example:
EQMP
{
- .name = "blockdev-remove-medium",
+ .name = "x-blockdev-remove-medium",
.args_type = "device:s",
- .mhandler.cmd_new = qmp_marshal_blockdev_remove_medium,
+ .mhandler.cmd_new = qmp_marshal_x_blockdev_remove_medium,
},
SQMP
-blockdev-remove-medium
-----------------------
+x-blockdev-remove-medium
+------------------------
Removes a medium (a block driver state tree) from a block device. That block
device's tray must currently be open (unless there is no attached guest device).
If the tray is open and there is no medium inserted, this will be a no-op.
+This command is still a work in progress and is considered experimental.
+Stay away from it unless you want to help with its development.
+
Arguments:
- "device": block device name (json-string)
Example:
--> { "execute": "blockdev-remove-medium",
+-> { "execute": "x-blockdev-remove-medium",
"arguments": { "device": "ide1-cd0" } }
<- { "error": { "class": "GenericError",
@@ -4240,7 +4243,7 @@ Example:
<- { "return": {} }
--> { "execute": "blockdev-remove-medium",
+-> { "execute": "x-blockdev-remove-medium",
"arguments": { "device": "ide1-cd0" } }
<- { "return": {} }
@@ -4248,19 +4251,22 @@ Example:
EQMP
{
- .name = "blockdev-insert-medium",
+ .name = "x-blockdev-insert-medium",
.args_type = "device:s,node-name:s",
- .mhandler.cmd_new = qmp_marshal_blockdev_insert_medium,
+ .mhandler.cmd_new = qmp_marshal_x_blockdev_insert_medium,
},
SQMP
-blockdev-insert-medium
-----------------------
+x-blockdev-insert-medium
+------------------------
Inserts a medium (a block driver state tree) into a block device. That block
device's tray must currently be open (unless there is no attached guest device)
and there must be no medium inserted already.
+This command is still a work in progress and is considered experimental.
+Stay away from it unless you want to help with its development.
+
Arguments:
- "device": block device name (json-string)
@@ -4276,7 +4282,7 @@ Example:
<- { "return": {} }
--> { "execute": "blockdev-insert-medium",
+-> { "execute": "x-blockdev-insert-medium",
"arguments": { "device": "ide1-cd0",
"node-name": "node0" } }
diff --git a/tests/qemu-iotests/118 b/tests/qemu-iotests/118
index a2bcd548c1..114d0e2dea 100755
--- a/tests/qemu-iotests/118
+++ b/tests/qemu-iotests/118
@@ -208,14 +208,14 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
else:
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
- result = self.vm.qmp('blockdev-remove-medium', device='drive0')
+ result = self.vm.qmp('x-blockdev-remove-medium', device='drive0')
self.assert_qmp(result, 'return', {})
result = self.vm.qmp('query-block')
self.assert_qmp(result, 'return[0]/tray_open', True)
self.assert_qmp_absent(result, 'return[0]/inserted')
- result = self.vm.qmp('blockdev-insert-medium', device='drive0',
+ result = self.vm.qmp('x-blockdev-insert-medium', device='drive0',
node_name='new')
self.assert_qmp(result, 'return', {})
@@ -243,7 +243,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
# Empty floppy drive
return
- result = self.vm.qmp('blockdev-remove-medium', device='drive0')
+ result = self.vm.qmp('x-blockdev-remove-medium', device='drive0')
self.assert_qmp(result, 'error/class', 'GenericError')
def test_insert_on_closed(self):
@@ -258,7 +258,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
'driver': 'file'}})
self.assert_qmp(result, 'return', {})
- result = self.vm.qmp('blockdev-insert-medium', device='drive0',
+ result = self.vm.qmp('x-blockdev-insert-medium', device='drive0',
node_name='new')
self.assert_qmp(result, 'error/class', 'GenericError')
@@ -289,7 +289,7 @@ class TestInitiallyFilled(GeneralChangeTestsBaseClass):
self.wait_for_open()
- result = self.vm.qmp('blockdev-insert-medium', device='drive0',
+ result = self.vm.qmp('x-blockdev-insert-medium', device='drive0',
node_name='new')
self.assert_qmp(result, 'error/class', 'GenericError')
@@ -311,7 +311,7 @@ class TestInitiallyEmpty(GeneralChangeTestsBaseClass):
self.wait_for_open()
- result = self.vm.qmp('blockdev-remove-medium', device='drive0')
+ result = self.vm.qmp('x-blockdev-remove-medium', device='drive0')
# Should be a no-op
self.assert_qmp(result, 'return', {})
@@ -604,14 +604,14 @@ class TestChangeReadOnly(ChangeBaseClass):
self.assert_qmp(result, 'return[0]/inserted/ro', False)
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
- result = self.vm.qmp('blockdev-remove-medium', device='drive0')
+ result = self.vm.qmp('x-blockdev-remove-medium', device='drive0')
self.assert_qmp(result, 'return', {})
result = self.vm.qmp('query-block')
self.assert_qmp(result, 'return[0]/tray_open', True)
self.assert_qmp_absent(result, 'return[0]/inserted')
- result = self.vm.qmp('blockdev-insert-medium', device='drive0',
+ result = self.vm.qmp('x-blockdev-insert-medium', device='drive0',
node_name='new')
self.assert_qmp(result, 'return', {})
@@ -653,7 +653,7 @@ class TestBlockJobsAfterCycle(ChangeBaseClass):
# For device-less BBs, calling blockdev-open-tray or blockdev-close-tray
# is not necessary
- result = self.vm.qmp('blockdev-remove-medium', device='drive0')
+ result = self.vm.qmp('x-blockdev-remove-medium', device='drive0')
self.assert_qmp(result, 'return', {})
result = self.vm.qmp('query-block')
@@ -666,7 +666,7 @@ class TestBlockJobsAfterCycle(ChangeBaseClass):
'driver': 'file'}})
self.assert_qmp(result, 'return', {})
- result = self.vm.qmp('blockdev-insert-medium', device='drive0',
+ result = self.vm.qmp('x-blockdev-insert-medium', device='drive0',
node_name='node0')
self.assert_qmp(result, 'return', {})
diff --git a/tests/qemu-iotests/139 b/tests/qemu-iotests/139
index 42f78c7baa..a4b969499c 100644
--- a/tests/qemu-iotests/139
+++ b/tests/qemu-iotests/139
@@ -174,7 +174,7 @@ class TestBlockdevDel(iotests.QMPTestCase):
def insertDrive(self, backend, node):
self.checkBlockBackend(backend, None)
self.checkBlockDriverState(node)
- result = self.vm.qmp('blockdev-insert-medium',
+ result = self.vm.qmp('x-blockdev-insert-medium',
device = backend, node_name = node)
self.assert_qmp(result, 'return', {})
self.checkBlockBackend(backend, node)