From: "Dr. David Alan Gilbert" <dgilb...@redhat.com> x-blockdev-change has no HMP equivalent, so add x_block_change.
Example useages are: x_block_change foo -a bah to add the node bah to the parent foo x_block_change foo -d bah to delete the node bah from the parent foo Signed-off-by: Dr. David Alan Gilbert <dgilb...@redhat.com> --- hmp-commands.hx | 18 ++++++++++++++++++ hmp.c | 20 ++++++++++++++++++++ hmp.h | 1 + 3 files changed, 39 insertions(+) diff --git a/hmp-commands.hx b/hmp-commands.hx index a381b0b..cf2459b 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -57,6 +57,24 @@ Quit the emulator. ETEXI { + .name = "x_block_change", + .args_type = "parent:B,add:-a,del:-d,child:B", + .params = "parent [-a] [-d] child", + .help = "add or remove a child from a block driver", + .mhandler.cmd = hmp_block_change, + }, + +STEXI +@item x_block_change +@findex x_block_change +Dynamically reconfigure the block driver state graph. It can be used +to add, remove, insert or replace a block driver state. Currently only +the Quorum driver implements this feature to add or remove its child. +This is useful to fix a broken quorum child. +ETEXI + + + { .name = "block_resize", .args_type = "device:B,size:o", .params = "device size", diff --git a/hmp.c b/hmp.c index dc6dc30..631dacb 100644 --- a/hmp.c +++ b/hmp.c @@ -1042,6 +1042,26 @@ void hmp_balloon(Monitor *mon, const QDict *qdict) } } +void hmp_block_change(Monitor *mon, const QDict *qdict) +{ + const char *parent = qdict_get_str(qdict, "parent"); + const char *child = qdict_get_str(qdict, "child"); + bool add = qdict_get_try_bool(qdict, "add", false); + bool del = qdict_get_try_bool(qdict, "del", false); + Error *err = NULL; + + if (add == del) { + error_setg(&err, "One of -a or -d must be set"); + hmp_handle_error(mon, &err); + return; + } + + qmp_x_blockdev_change(parent, + del, child, + add, child, &err); + hmp_handle_error(mon, &err); +} + void hmp_block_resize(Monitor *mon, const QDict *qdict) { const char *device = qdict_get_str(qdict, "device"); diff --git a/hmp.h b/hmp.h index 864a300..1588850 100644 --- a/hmp.h +++ b/hmp.h @@ -53,6 +53,7 @@ void hmp_cont(Monitor *mon, const QDict *qdict); void hmp_system_wakeup(Monitor *mon, const QDict *qdict); void hmp_nmi(Monitor *mon, const QDict *qdict); void hmp_set_link(Monitor *mon, const QDict *qdict); +void hmp_block_change(Monitor *mon, const QDict *qdict); void hmp_block_passwd(Monitor *mon, const QDict *qdict); void hmp_balloon(Monitor *mon, const QDict *qdict); void hmp_block_resize(Monitor *mon, const QDict *qdict); -- 2.5.0