* Maxim Levitsky (mlevi...@redhat.com) wrote: > Signed-off-by: Maxim Levitsky <mlevi...@redhat.com>
Yes, I think that's OK; I can imagine nbd might want to move on it's own somewhere since it's not really core block code; copying in Eric. Reviewed-by: Dr. David Alan Gilbert <dgilb...@redhat.com> > --- > block/monitor/block-hmp-cmds.c | 88 ++++++++++++++++++++++++++++++ > include/block/block-hmp-commands.h | 5 ++ > include/monitor/hmp.h | 4 -- > monitor/hmp-cmds.c | 87 ----------------------------- > 4 files changed, 93 insertions(+), 91 deletions(-) > > diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c > index 9aa94ea6e0..df0178d0f9 100644 > --- a/block/monitor/block-hmp-cmds.c > +++ b/block/monitor/block-hmp-cmds.c > @@ -22,8 +22,10 @@ > #include "qapi/qmp/qerror.h" > #include "qemu/config-file.h" > #include "qemu/option.h" > +#include "qemu/sockets.h" > #include "sysemu/sysemu.h" > #include "monitor/monitor.h" > +#include "block/nbd.h" > #include "block/block_int.h" > #include "block/block-hmp-commands.h" > #include "monitor/hmp.h" > @@ -327,3 +329,89 @@ void hmp_snapshot_delete_blkdev_internal(Monitor *mon, > const QDict *qdict) > true, name, &err); > hmp_handle_error(mon, err); > } > + > +void hmp_nbd_server_start(Monitor *mon, const QDict *qdict) > +{ > + const char *uri = qdict_get_str(qdict, "uri"); > + bool writable = qdict_get_try_bool(qdict, "writable", false); > + bool all = qdict_get_try_bool(qdict, "all", false); > + Error *local_err = NULL; > + BlockInfoList *block_list, *info; > + SocketAddress *addr; > + > + if (writable && !all) { > + error_setg(&local_err, "-w only valid together with -a"); > + goto exit; > + } > + > + /* First check if the address is valid and start the server. */ > + addr = socket_parse(uri, &local_err); > + if (local_err != NULL) { > + goto exit; > + } > + > + nbd_server_start(addr, NULL, NULL, &local_err); > + qapi_free_SocketAddress(addr); > + if (local_err != NULL) { > + goto exit; > + } > + > + if (!all) { > + return; > + } > + > + /* Then try adding all block devices. If one fails, close all and > + * exit. > + */ > + block_list = qmp_query_block(NULL); > + > + for (info = block_list; info; info = info->next) { > + if (!info->value->has_inserted) { > + continue; > + } > + > + qmp_nbd_server_add(info->value->device, false, NULL, > + true, writable, false, NULL, &local_err); > + > + if (local_err != NULL) { > + qmp_nbd_server_stop(NULL); > + break; > + } > + } > + > + qapi_free_BlockInfoList(block_list); > + > +exit: > + hmp_handle_error(mon, local_err); > +} > + > +void hmp_nbd_server_add(Monitor *mon, const QDict *qdict) > +{ > + const char *device = qdict_get_str(qdict, "device"); > + const char *name = qdict_get_try_str(qdict, "name"); > + bool writable = qdict_get_try_bool(qdict, "writable", false); > + Error *local_err = NULL; > + > + qmp_nbd_server_add(device, !!name, name, true, writable, > + false, NULL, &local_err); > + hmp_handle_error(mon, local_err); > +} > + > +void hmp_nbd_server_remove(Monitor *mon, const QDict *qdict) > +{ > + const char *name = qdict_get_str(qdict, "name"); > + bool force = qdict_get_try_bool(qdict, "force", false); > + Error *err = NULL; > + > + /* Rely on NBD_SERVER_REMOVE_MODE_SAFE being the default */ > + qmp_nbd_server_remove(name, force, NBD_SERVER_REMOVE_MODE_HARD, &err); > + hmp_handle_error(mon, err); > +} > + > +void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict) > +{ > + Error *err = NULL; > + > + qmp_nbd_server_stop(&err); > + hmp_handle_error(mon, err); > +} > diff --git a/include/block/block-hmp-commands.h > b/include/block/block-hmp-commands.h > index 3fc2daf3a9..721b9a1978 100644 > --- a/include/block/block-hmp-commands.h > +++ b/include/block/block-hmp-commands.h > @@ -21,4 +21,9 @@ void hmp_snapshot_blkdev(Monitor *mon, const QDict *qdict); > void hmp_snapshot_blkdev_internal(Monitor *mon, const QDict *qdict); > void hmp_snapshot_delete_blkdev_internal(Monitor *mon, const QDict *qdict); > > +void hmp_nbd_server_start(Monitor *mon, const QDict *qdict); > +void hmp_nbd_server_add(Monitor *mon, const QDict *qdict); > +void hmp_nbd_server_remove(Monitor *mon, const QDict *qdict); > +void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict); > + > #endif > diff --git a/include/monitor/hmp.h b/include/monitor/hmp.h > index 6d34e29bb6..736a969131 100644 > --- a/include/monitor/hmp.h > +++ b/include/monitor/hmp.h > @@ -94,10 +94,6 @@ void hmp_getfd(Monitor *mon, const QDict *qdict); > void hmp_closefd(Monitor *mon, const QDict *qdict); > void hmp_sendkey(Monitor *mon, const QDict *qdict); > void hmp_screendump(Monitor *mon, const QDict *qdict); > -void hmp_nbd_server_start(Monitor *mon, const QDict *qdict); > -void hmp_nbd_server_add(Monitor *mon, const QDict *qdict); > -void hmp_nbd_server_remove(Monitor *mon, const QDict *qdict); > -void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict); > void hmp_chardev_add(Monitor *mon, const QDict *qdict); > void hmp_chardev_change(Monitor *mon, const QDict *qdict); > void hmp_chardev_remove(Monitor *mon, const QDict *qdict); > diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c > index 46b46b6dd7..67d2ca8a4c 100644 > --- a/monitor/hmp-cmds.c > +++ b/monitor/hmp-cmds.c > @@ -45,7 +45,6 @@ > #include "qapi/string-output-visitor.h" > #include "qom/object_interfaces.h" > #include "ui/console.h" > -#include "block/nbd.h" > #include "block/qapi.h" > #include "qemu-io.h" > #include "qemu/cutils.h" > @@ -2154,92 +2153,6 @@ void hmp_screendump(Monitor *mon, const QDict *qdict) > hmp_handle_error(mon, err); > } > > -void hmp_nbd_server_start(Monitor *mon, const QDict *qdict) > -{ > - const char *uri = qdict_get_str(qdict, "uri"); > - bool writable = qdict_get_try_bool(qdict, "writable", false); > - bool all = qdict_get_try_bool(qdict, "all", false); > - Error *local_err = NULL; > - BlockInfoList *block_list, *info; > - SocketAddress *addr; > - > - if (writable && !all) { > - error_setg(&local_err, "-w only valid together with -a"); > - goto exit; > - } > - > - /* First check if the address is valid and start the server. */ > - addr = socket_parse(uri, &local_err); > - if (local_err != NULL) { > - goto exit; > - } > - > - nbd_server_start(addr, NULL, NULL, &local_err); > - qapi_free_SocketAddress(addr); > - if (local_err != NULL) { > - goto exit; > - } > - > - if (!all) { > - return; > - } > - > - /* Then try adding all block devices. If one fails, close all and > - * exit. > - */ > - block_list = qmp_query_block(NULL); > - > - for (info = block_list; info; info = info->next) { > - if (!info->value->has_inserted) { > - continue; > - } > - > - qmp_nbd_server_add(info->value->device, false, NULL, > - true, writable, false, NULL, &local_err); > - > - if (local_err != NULL) { > - qmp_nbd_server_stop(NULL); > - break; > - } > - } > - > - qapi_free_BlockInfoList(block_list); > - > -exit: > - hmp_handle_error(mon, local_err); > -} > - > -void hmp_nbd_server_add(Monitor *mon, const QDict *qdict) > -{ > - const char *device = qdict_get_str(qdict, "device"); > - const char *name = qdict_get_try_str(qdict, "name"); > - bool writable = qdict_get_try_bool(qdict, "writable", false); > - Error *local_err = NULL; > - > - qmp_nbd_server_add(device, !!name, name, true, writable, > - false, NULL, &local_err); > - hmp_handle_error(mon, local_err); > -} > - > -void hmp_nbd_server_remove(Monitor *mon, const QDict *qdict) > -{ > - const char *name = qdict_get_str(qdict, "name"); > - bool force = qdict_get_try_bool(qdict, "force", false); > - Error *err = NULL; > - > - /* Rely on NBD_SERVER_REMOVE_MODE_SAFE being the default */ > - qmp_nbd_server_remove(name, force, NBD_SERVER_REMOVE_MODE_HARD, &err); > - hmp_handle_error(mon, err); > -} > - > -void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict) > -{ > - Error *err = NULL; > - > - qmp_nbd_server_stop(&err); > - hmp_handle_error(mon, err); > -} > - > void hmp_chardev_add(Monitor *mon, const QDict *qdict) > { > const char *args = qdict_get_str(qdict, "args"); > -- > 2.17.2 > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK