Message ID | 20200127103647.17761-9-mlevitsk@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | RFC: [for 5.0]: HMP monitor handlers cleanups | expand |
* Maxim Levitsky (mlevitsk@redhat.com) wrote: > Signed-off-by: Maxim Levitsky <mlevitsk@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 <dgilbert@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 / dgilbert@redhat.com / Manchester, UK
On 1/28/20 12:56 PM, Dr. David Alan Gilbert wrote: > * Maxim Levitsky (mlevitsk@redhat.com) wrote: >> Signed-off-by: Maxim Levitsky <mlevitsk@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. I think that nbd-server-start and friends ARE related to core block code; they do not work without a BDS node. It's not the same as a block driver, though, in that it is exposing the BDS to the outside world, rather than connecting an outside resource for use internally by the guest. At any rate, block-hmp-cmds.c seems reasonable enough as a new location for these HMP commands. > > > Reviewed-by: Dr. David Alan Gilbert <dgilbert@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(-) >> Reviewed-by: Eric Blake <eblake@redhat.com>
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");
Signed-off-by: Maxim Levitsky <mlevitsk@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(-)