[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 11/29] qemu-nbd: Use blk_exp_add() to create the export
From: |
Kevin Wolf |
Subject: |
[PATCH 11/29] qemu-nbd: Use blk_exp_add() to create the export |
Date: |
Mon, 7 Sep 2020 20:19:53 +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>
---
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 cab65529a5..a863741e8f 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
- [PATCH 02/29] qapi: Create block-export module, (continued)
- [PATCH 02/29] qapi: Create block-export module, Kevin Wolf, 2020/09/07
- [PATCH 08/29] nbd: Add max-connections to nbd-server-start, Kevin Wolf, 2020/09/07
- [PATCH 04/29] block/export: Add BlockExport infrastructure and block-export-add, Kevin Wolf, 2020/09/07
- [PATCH 06/29] qemu-nbd: Use raw block driver for --offset, Kevin Wolf, 2020/09/07
- [PATCH 07/29] block/export: Remove magic from block-export-add, Kevin Wolf, 2020/09/07
- [PATCH 09/29] nbd: Add writethrough to block-export-add, Kevin Wolf, 2020/09/07
- [PATCH 10/29] nbd: Remove NBDExport.close callback, Kevin Wolf, 2020/09/07
- [PATCH 11/29] qemu-nbd: Use blk_exp_add() to create the export,
Kevin Wolf <=
- [PATCH 12/29] nbd/server: Simplify export shutdown, Kevin Wolf, 2020/09/07
- [PATCH 13/29] block/export: Move refcount from NBDExport to BlockExport, Kevin Wolf, 2020/09/07
- [PATCH 14/29] block/export: Move AioContext from NBDExport to BlockExport, Kevin Wolf, 2020/09/07
- [PATCH 16/29] block/export: Allocate BlockExport in blk_exp_add(), Kevin Wolf, 2020/09/07
- [PATCH 15/29] block/export: Add node-name to BlockExportOptions, Kevin Wolf, 2020/09/07
- [PATCH 17/29] block/export: Add blk_exp_close_all(_type), Kevin Wolf, 2020/09/07