mirror of https://github.com/xemu-project/xemu.git
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: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-id: 20171207201320.19284-4-stefanha@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
d02d8dde0c
commit
882e9b89af
11
blockdev.c
11
blockdev.c
|
@ -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,
|
||||||
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 @@
|
||||||
#
|
#
|
||||||
# @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 @@
|
||||||
##
|
##
|
||||||
{ 'command': 'x-blockdev-set-iothread',
|
{ 'command': 'x-blockdev-set-iothread',
|
||||||
'data' : { 'node-name': 'str',
|
'data' : { 'node-name': 'str',
|
||||||
'iothread': 'StrOrNull' } }
|
'iothread': 'StrOrNull',
|
||||||
|
'*force': 'bool' } }
|
||||||
|
|
Loading…
Reference in New Issue