X-Git-Url: https://repo.jachan.dev/qemu.git/blobdiff_plain/3f4331bfd112840e94935b0fd098ee88c07beabc..2133a5f6b8f8941a6a3734c6c1990656553de76c:/blockdev-nbd.c diff --git a/blockdev-nbd.c b/blockdev-nbd.c index 8031813071..95f10c81e3 100644 --- a/blockdev-nbd.c +++ b/blockdev-nbd.c @@ -9,15 +9,15 @@ * later. See the COPYING file in the top-level directory. */ -#include "blockdev.h" -#include "hw/block-common.h" -#include "monitor.h" -#include "qerror.h" -#include "sysemu.h" +#include "sysemu/blockdev.h" +#include "hw/block/block.h" +#include "monitor/monitor.h" +#include "qapi/qmp/qerror.h" +#include "sysemu/sysemu.h" #include "qmp-commands.h" #include "trace.h" -#include "nbd.h" -#include "qemu_socket.h" +#include "block/nbd.h" +#include "qemu/sockets.h" static int server_fd = -1; @@ -82,6 +82,11 @@ void qmp_nbd_server_add(const char *device, bool has_writable, bool writable, NBDExport *exp; NBDCloseNotifier *n; + if (server_fd == -1) { + error_setg(errp, "NBD server not running"); + return; + } + if (nbd_export_find(device)) { error_setg(errp, "NBD server already exporting device '%s'", device); return; @@ -93,6 +98,13 @@ void qmp_nbd_server_add(const char *device, bool has_writable, bool writable, return; } + if (!has_writable) { + writable = false; + } + if (bdrv_is_read_only(bs)) { + writable = false; + } + exp = nbd_export_new(bs, 0, -1, writable ? 0 : NBD_FLAG_READ_ONLY, nbd_server_put_ref); @@ -113,7 +125,9 @@ void qmp_nbd_server_stop(Error **errp) nbd_close_notifier(&cn->n, nbd_export_get_blockdev(cn->exp)); } - qemu_set_fd_handler2(server_fd, NULL, NULL, NULL, NULL); - close(server_fd); - server_fd = -1; + if (server_fd != -1) { + qemu_set_fd_handler2(server_fd, NULL, NULL, NULL, NULL); + close(server_fd); + server_fd = -1; + } }