提交 882e9b89 编写于 作者: S Stefan Hajnoczi

blockdev: add x-blockdev-set-iothread force boolean

When a node is already associated with a BlockBackend the
x-blockdev-set-iothread command refuses to set the IOThread.  This is to
prevent accidentally changing the IOThread when the nodes are in use.

When the nodes are created with -drive they automatically get a
BlockBackend.  In that case we know nothing is using them yet and it's
safe to set the IOThread.  Add a force boolean to override the check.
Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: NEric Blake <eblake@redhat.com>
Message-id: 20171207201320.19284-4-stefanha@redhat.com
Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
上级 d02d8dde
...@@ -4131,7 +4131,7 @@ BlockJobInfoList *qmp_query_block_jobs(Error **errp) ...@@ -4131,7 +4131,7 @@ BlockJobInfoList *qmp_query_block_jobs(Error **errp)
} }
void qmp_x_blockdev_set_iothread(const char *node_name, StrOrNull *iothread, void qmp_x_blockdev_set_iothread(const char *node_name, StrOrNull *iothread,
Error **errp) bool has_force, bool force, Error **errp)
{ {
AioContext *old_context; AioContext *old_context;
AioContext *new_context; AioContext *new_context;
...@@ -4143,10 +4143,11 @@ void qmp_x_blockdev_set_iothread(const char *node_name, StrOrNull *iothread, ...@@ -4143,10 +4143,11 @@ void qmp_x_blockdev_set_iothread(const char *node_name, StrOrNull *iothread,
return; return;
} }
/* If we want to allow more extreme test scenarios this guard could be /* Protects against accidents. */
* removed. For now it protects against accidents. */ if (!(has_force && force) && bdrv_has_blk(bs)) {
if (bdrv_has_blk(bs)) { error_setg(errp, "Node %s is associated with a BlockBackend and could "
error_setg(errp, "Node %s is in use", node_name); "be in use (use force=true to override this check)",
node_name);
return; return;
} }
......
...@@ -3962,6 +3962,9 @@ ...@@ -3962,6 +3962,9 @@
# #
# @iothread: the name of the IOThread object or null for the main loop # @iothread: the name of the IOThread object or null for the main loop
# #
# @force: true if the node and its children should be moved when a BlockBackend
# is already attached
#
# Note: this command is experimental and intended for test cases that need # Note: this command is experimental and intended for test cases that need
# control over IOThreads only. # control over IOThreads only.
# #
...@@ -3984,4 +3987,5 @@ ...@@ -3984,4 +3987,5 @@
## ##
{ 'command': 'x-blockdev-set-iothread', { 'command': 'x-blockdev-set-iothread',
'data' : { 'node-name': 'str', 'data' : { 'node-name': 'str',
'iothread': 'StrOrNull' } } 'iothread': 'StrOrNull',
'*force': 'bool' } }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册