[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 07/16] block: Add option to create inactive nodes
From: |
Kevin Wolf |
Subject: |
[PATCH v3 07/16] block: Add option to create inactive nodes |
Date: |
Tue, 4 Feb 2025 22:13:58 +0100 |
In QEMU, nodes are automatically created inactive while expecting an
incoming migration (i.e. RUN_STATE_INMIGRATE). In qemu-storage-daemon,
the notion of runstates doesn't exist. It also wouldn't necessarily make
sense to introduce it because a single daemon can serve multiple VMs
that can be in different states.
Therefore, allow the user to explicitly open images as inactive with a
new option. The default is as before: Nodes are usually active, except
when created during RUN_STATE_INMIGRATE.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Acked-by: Fabiano Rosas <farosas@suse.de>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
---
qapi/block-core.json | 6 ++++++
include/block/block-common.h | 1 +
block.c | 9 +++++++++
3 files changed, 16 insertions(+)
diff --git a/qapi/block-core.json b/qapi/block-core.json
index 1296ca8ae2..6029e54889 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -4683,6 +4683,11 @@
#
# @cache: cache-related options
#
+# @active: whether the block node should be activated (default: true).
+# Having inactive block nodes is useful primarily for migration because it
+# allows opening an image on the destination while the source is still
+# holding locks for it. (Since 10.0)
+#
# @read-only: whether the block device should be read-only (default:
# false). Note that some block drivers support only read-only
# access, either generally or in certain configurations. In this
@@ -4709,6 +4714,7 @@
'*node-name': 'str',
'*discard': 'BlockdevDiscardOptions',
'*cache': 'BlockdevCacheOptions',
+ '*active': 'bool',
'*read-only': 'bool',
'*auto-read-only': 'bool',
'*force-share': 'bool',
diff --git a/include/block/block-common.h b/include/block/block-common.h
index 338fe5ff7a..7030669f04 100644
--- a/include/block/block-common.h
+++ b/include/block/block-common.h
@@ -257,6 +257,7 @@ typedef enum {
#define BDRV_OPT_AUTO_READ_ONLY "auto-read-only"
#define BDRV_OPT_DISCARD "discard"
#define BDRV_OPT_FORCE_SHARE "force-share"
+#define BDRV_OPT_ACTIVE "active"
#define BDRV_SECTOR_BITS 9
diff --git a/block.c b/block.c
index 73d0de12cf..7f6eca392f 100644
--- a/block.c
+++ b/block.c
@@ -1573,6 +1573,10 @@ static void update_flags_from_options(int *flags,
QemuOpts *opts)
if (qemu_opt_get_bool_del(opts, BDRV_OPT_AUTO_READ_ONLY, false)) {
*flags |= BDRV_O_AUTO_RDONLY;
}
+
+ if (!qemu_opt_get_bool_del(opts, BDRV_OPT_ACTIVE, true)) {
+ *flags |= BDRV_O_INACTIVE;
+ }
}
static void update_options_from_flags(QDict *options, int flags)
@@ -1799,6 +1803,11 @@ QemuOptsList bdrv_runtime_opts = {
.type = QEMU_OPT_BOOL,
.help = "Ignore flush requests",
},
+ {
+ .name = BDRV_OPT_ACTIVE,
+ .type = QEMU_OPT_BOOL,
+ .help = "Node is activated",
+ },
{
.name = BDRV_OPT_READ_ONLY,
.type = QEMU_OPT_BOOL,
--
2.48.1
- [PATCH v3 00/16] block: Managing inactive nodes (QSD migration), Kevin Wolf, 2025/02/04
- [PATCH v3 01/16] block: Add 'active' field to BlockDeviceInfo, Kevin Wolf, 2025/02/04
- [PATCH v3 03/16] block: Inactivate external snapshot overlays when necessary, Kevin Wolf, 2025/02/04
- [PATCH v3 04/16] migration/block-active: Remove global active flag, Kevin Wolf, 2025/02/04
- [PATCH v3 05/16] block: Don't attach inactive child to active node, Kevin Wolf, 2025/02/04
- [PATCH v3 07/16] block: Add option to create inactive nodes,
Kevin Wolf <=
- [PATCH v3 02/16] block: Allow inactivating already inactive nodes, Kevin Wolf, 2025/02/04
- [PATCH v3 06/16] block: Fix crash on block_resize on inactive node, Kevin Wolf, 2025/02/04
- [PATCH v3 09/16] block: Support inactive nodes in blk_insert_bs(), Kevin Wolf, 2025/02/04
- [PATCH v3 08/16] block: Add blockdev-set-active QMP command, Kevin Wolf, 2025/02/04
- [PATCH v3 10/16] block/export: Don't ignore image activation error in blk_exp_add(), Kevin Wolf, 2025/02/04
- [PATCH v3 11/16] block: Drain nodes before inactivating them, Kevin Wolf, 2025/02/04
- [PATCH v3 13/16] nbd/server: Support inactive nodes, Kevin Wolf, 2025/02/04
- [PATCH v3 14/16] iotests: Add filter_qtest(), Kevin Wolf, 2025/02/04