* Eric Blake (ebl...@redhat.com) wrote: > Since everything else about the nbd-server-* QMP commands is > accessible from HMP, we might as well make removing an export > available as well. For now, I went with a bool flag rather > than a mode string for choosing between safe (default) and > hard modes. > > Signed-off-by: Eric Blake <ebl...@redhat.com>
For the HMP side of things: Reviewed-by: Dr. David Alan Gilbert <dgilb...@redhat.com> and yes, if you've already got the rest of it on your NBD queue just add this one into your queue. Dave > --- > > Based-on: <20180119135719.24745-1-vsement...@virtuozzo.com> > ([PATCH v3 0/5] nbd export qmp interface) > > hmp.h | 1 + > hmp.c | 14 +++++++++++--- > hmp-commands.hx | 17 +++++++++++++++++ > 3 files changed, 29 insertions(+), 3 deletions(-) > > diff --git a/hmp.h b/hmp.h > index a6f56b1f29e..536cb91caa4 100644 > --- a/hmp.h > +++ b/hmp.h > @@ -101,6 +101,7 @@ 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); > diff --git a/hmp.c b/hmp.c > index 7a64dd59c5c..b3de32d219b 100644 > --- a/hmp.c > +++ b/hmp.c > @@ -2226,10 +2226,18 @@ void hmp_nbd_server_add(Monitor *mon, const QDict > *qdict) > Error *local_err = NULL; > > qmp_nbd_server_add(device, !!name, name, true, writable, &local_err); > + hmp_handle_error(mon, &local_err); > +} > > - if (local_err != NULL) { > - 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) > diff --git a/hmp-commands.hx b/hmp-commands.hx > index b8b6fb91848..8a59338bc20 100644 > --- a/hmp-commands.hx > +++ b/hmp-commands.hx > @@ -1565,6 +1565,23 @@ Export a block device through QEMU's NBD server, which > must be started > beforehand with @command{nbd_server_start}. The @option{-w} option makes the > exported device writable too. The export name is controlled by @var{name}, > defaulting to @var{device}. > +ETEXI > + > + { > + .name = "nbd_server_remove", > + .args_type = "force:-f,name:s", > + .params = "nbd_server_remove [-f] name", > + .help = "remove an export previously exposed via NBD", > + .cmd = hmp_nbd_server_remove, > + }, > +STEXI > +@item nbd_server_remove [-f] @var{name} > +@findex nbd_server_remove > +Stop exporting a block device through QEMU's NBD server, which was > +previously started with @command{nbd_server_add}. The @option{-f} > +option forces the server to drop the export immediately even if > +clients are connected; otherwise the command fails unless there are no > +clients. > ETEXI > > { > -- > 2.14.3 > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK