[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 15/37] qemu-nbd: Use blk_exp_add() to create the export
From: |
Kevin Wolf |
Subject: |
[PULL 15/37] qemu-nbd: Use blk_exp_add() to create the export |
Date: |
Fri, 2 Oct 2020 16:43:23 +0200 |
With this change, NBD exports are now only created through the
BlockExport interface. This allows us finally to move things from the
NBD layer to the BlockExport layer if they make sense for other export
types, too.
blk_exp_add() returns only a weak reference, so the explicit
nbd_export_put() goes away.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Message-Id: <20200924152717.287415-12-kwolf@redhat.com>
Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
include/block/nbd.h | 1 +
blockdev-nbd.c | 8 +++++++-
qemu-nbd.c | 28 ++++++++++++++++++++++------
3 files changed, 30 insertions(+), 7 deletions(-)
diff --git a/include/block/nbd.h b/include/block/nbd.h
index 9449b3dac4..1dafe70615 100644
--- a/include/block/nbd.h
+++ b/include/block/nbd.h
@@ -352,6 +352,7 @@ void nbd_client_new(QIOChannelSocket *sioc,
void nbd_client_get(NBDClient *client);
void nbd_client_put(NBDClient *client);
+void nbd_server_is_qemu_nbd(bool value);
void nbd_server_start(SocketAddress *addr, const char *tls_creds,
const char *tls_authz, uint32_t max_connections,
Error **errp);
diff --git a/blockdev-nbd.c b/blockdev-nbd.c
index 3a51b3e792..7bb0b09697 100644
--- a/blockdev-nbd.c
+++ b/blockdev-nbd.c
@@ -28,9 +28,15 @@ typedef struct NBDServerData {
} NBDServerData;
static NBDServerData *nbd_server;
+static bool is_qemu_nbd;
static void nbd_update_server_watch(NBDServerData *s);
+void nbd_server_is_qemu_nbd(bool value)
+{
+ is_qemu_nbd = value;
+}
+
static void nbd_blockdev_client_closed(NBDClient *client, bool ignored)
{
nbd_client_put(client);
@@ -176,7 +182,7 @@ BlockExport *nbd_export_create(BlockExportOptions
*exp_args, Error **errp)
assert(exp_args->type == BLOCK_EXPORT_TYPE_NBD);
- if (!nbd_server) {
+ if (!nbd_server && !is_qemu_nbd) {
error_setg(errp, "NBD server not running");
return NULL;
}
diff --git a/qemu-nbd.c b/qemu-nbd.c
index abbed8f87e..fc6e68a797 100644
--- a/qemu-nbd.c
+++ b/qemu-nbd.c
@@ -65,7 +65,6 @@
#define MBR_SIZE 512
-static NBDExport *export;
static int verbose;
static char *srcpath;
static SocketAddress *saddr;
@@ -580,6 +579,7 @@ int main(int argc, char **argv)
int old_stderr = -1;
unsigned socket_activation;
const char *pid_file_name = NULL;
+ BlockExportOptions *export_opts;
#if HAVE_NBD_DEVICE
/* The client thread uses SIGTERM to interrupt the server. A signal
@@ -1059,9 +1059,27 @@ int main(int argc, char **argv)
bs->detect_zeroes = detect_zeroes;
- export = nbd_export_new(bs, export_name,
- export_description, bitmap, readonly, shared > 1,
- writethrough, &error_fatal);
+ nbd_server_is_qemu_nbd(true);
+
+ export_opts = g_new(BlockExportOptions, 1);
+ *export_opts = (BlockExportOptions) {
+ .type = BLOCK_EXPORT_TYPE_NBD,
+ .has_writethrough = true,
+ .writethrough = writethrough,
+ .u.nbd = {
+ .device = g_strdup(bdrv_get_node_name(bs)),
+ .has_name = true,
+ .name = g_strdup(export_name),
+ .has_description = !!export_description,
+ .description = g_strdup(export_description),
+ .has_writable = true,
+ .writable = !readonly,
+ .has_bitmap = !!bitmap,
+ .bitmap = g_strdup(bitmap),
+ },
+ };
+ blk_exp_add(export_opts, &error_fatal);
+ qapi_free_BlockExportOptions(export_opts);
if (device) {
#if HAVE_NBD_DEVICE
@@ -1101,9 +1119,7 @@ int main(int argc, char **argv)
do {
main_loop_wait(false);
if (state == TERMINATE) {
- nbd_export_put(export);
nbd_export_close_all();
- export = NULL;
state = TERMINATED;
}
} while (state != TERMINATED);
--
2.25.4
- [PULL 06/37] qapi: Create block-export module, (continued)
- [PULL 06/37] qapi: Create block-export module, Kevin Wolf, 2020/10/02
- [PULL 09/37] qemu-storage-daemon: Use qmp_block_export_add(), Kevin Wolf, 2020/10/02
- [PULL 07/37] qapi: Rename BlockExport to BlockExportOptions, Kevin Wolf, 2020/10/02
- [PULL 11/37] block/export: Remove magic from block-export-add, Kevin Wolf, 2020/10/02
- [PULL 10/37] qemu-nbd: Use raw block driver for --offset, Kevin Wolf, 2020/10/02
- [PULL 12/37] nbd: Add max-connections to nbd-server-start, Kevin Wolf, 2020/10/02
- [PULL 13/37] nbd: Add writethrough to block-export-add, Kevin Wolf, 2020/10/02
- [PULL 16/37] nbd/server: Simplify export shutdown, Kevin Wolf, 2020/10/02
- [PULL 14/37] nbd: Remove NBDExport.close callback, Kevin Wolf, 2020/10/02
- [PULL 17/37] block/export: Move refcount from NBDExport to BlockExport, Kevin Wolf, 2020/10/02
- [PULL 15/37] qemu-nbd: Use blk_exp_add() to create the export,
Kevin Wolf <=
- [PULL 18/37] block/export: Move AioContext from NBDExport to BlockExport, Kevin Wolf, 2020/10/02
- [PULL 19/37] block/export: Add node-name to BlockExportOptions, Kevin Wolf, 2020/10/02
- [PULL 21/37] block/export: Add blk_exp_close_all(_type), Kevin Wolf, 2020/10/02
- [PULL 20/37] block/export: Allocate BlockExport in blk_exp_add(), Kevin Wolf, 2020/10/02
- [PULL 22/37] block/export: Add 'id' option to block-export-add, Kevin Wolf, 2020/10/02
- [PULL 24/37] block/export: Add block-export-del, Kevin Wolf, 2020/10/02
- [PULL 23/37] block/export: Move strong user reference to block_exports, Kevin Wolf, 2020/10/02
- [PULL 25/37] block/export: Add BLOCK_EXPORT_DELETED event, Kevin Wolf, 2020/10/02
- [PULL 26/37] block/export: Move blk to BlockExport, Kevin Wolf, 2020/10/02
- [PULL 30/37] nbd: Merge nbd_export_new() and nbd_export_create(), Kevin Wolf, 2020/10/02