Re: [PATCH v2 01/15] block: Add 'active' field to BlockDeviceInfo

2025-02-03 Thread Stefan Hajnoczi
On Thu, Jan 30, 2025 at 06:12:32PM +0100, Kevin Wolf wrote:
> This allows querying from QMP (and also HMP) whether an image is
> currently active or inactive (in the sense of BDRV_O_INACTIVE).
> 
> Signed-off-by: Kevin Wolf 
> ---
>  qapi/block-core.json   |  6 +-
>  block/monitor/block-hmp-cmds.c |  5 +++--
>  block/qapi.c   |  1 +
>  tests/qemu-iotests/184.out |  2 ++
>  tests/qemu-iotests/191.out | 16 
>  tests/qemu-iotests/273.out |  5 +
>  6 files changed, 32 insertions(+), 3 deletions(-)

Reviewed-by: Stefan Hajnoczi 


signature.asc
Description: PGP signature


Re: [PATCH v2 01/15] block: Add 'active' field to BlockDeviceInfo

2025-01-30 Thread Eric Blake
On Thu, Jan 30, 2025 at 06:12:32PM +0100, Kevin Wolf wrote:
> This allows querying from QMP (and also HMP) whether an image is
> currently active or inactive (in the sense of BDRV_O_INACTIVE).
> 
> Signed-off-by: Kevin Wolf 
> ---

> +++ b/block/qapi.c
> @@ -63,6 +63,7 @@ BlockDeviceInfo *bdrv_block_device_info(BlockBackend *blk,
>  info->file   = g_strdup(bs->filename);
>  info->ro = bdrv_is_read_only(bs);
>  info->drv= g_strdup(bs->drv->format_name);
> +info->active = !bdrv_is_inactive(bs);

Lots of double-negatives - annoying, but I don't see a way around it,
and I agree with your decision to make the public interface use the
positive (active) rather than the negative (inactive), even though the
negative is the unusual case.

Reviewed-by: Eric Blake 

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.
Virtualization:  qemu.org | libguestfs.org




[PATCH v2 01/15] block: Add 'active' field to BlockDeviceInfo

2025-01-30 Thread Kevin Wolf
This allows querying from QMP (and also HMP) whether an image is
currently active or inactive (in the sense of BDRV_O_INACTIVE).

Signed-off-by: Kevin Wolf 
---
 qapi/block-core.json   |  6 +-
 block/monitor/block-hmp-cmds.c |  5 +++--
 block/qapi.c   |  1 +
 tests/qemu-iotests/184.out |  2 ++
 tests/qemu-iotests/191.out | 16 
 tests/qemu-iotests/273.out |  5 +
 6 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/qapi/block-core.json b/qapi/block-core.json
index fd3bcc1c17..1296ca8ae2 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -486,6 +486,10 @@
 # @backing_file_depth: number of files in the backing file chain
 # (since: 1.2)
 #
+# @active: true if the backend is active; typical cases for inactive backends
+# are on the migration source instance after migration completes and on the
+# destination before it completes. (since: 10.0)
+#
 # @encrypted: true if the backing device is encrypted
 #
 # @detect_zeroes: detect and optimize zero writes (Since 2.1)
@@ -556,7 +560,7 @@
 { 'struct': 'BlockDeviceInfo',
   'data': { 'file': 'str', '*node-name': 'str', 'ro': 'bool', 'drv': 'str',
 '*backing_file': 'str', 'backing_file_depth': 'int',
-'encrypted': 'bool',
+'active': 'bool', 'encrypted': 'bool',
 'detect_zeroes': 'BlockdevDetectZeroesOptions',
 'bps': 'int', 'bps_rd': 'int', 'bps_wr': 'int',
 'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int',
diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c
index 1d312513fc..e84ff6ab16 100644
--- a/block/monitor/block-hmp-cmds.c
+++ b/block/monitor/block-hmp-cmds.c
@@ -630,11 +630,12 @@ static void print_block_info(Monitor *mon, BlockInfo 
*info,
 }
 
 if (inserted) {
-monitor_printf(mon, ": %s (%s%s%s)\n",
+monitor_printf(mon, ": %s (%s%s%s%s)\n",
inserted->file,
inserted->drv,
inserted->ro ? ", read-only" : "",
-   inserted->encrypted ? ", encrypted" : "");
+   inserted->encrypted ? ", encrypted" : "",
+   inserted->active ? "" : ", inactive");
 } else {
 monitor_printf(mon, ": [not inserted]\n");
 }
diff --git a/block/qapi.c b/block/qapi.c
index 902ecb08e0..63604dc6d3 100644
--- a/block/qapi.c
+++ b/block/qapi.c
@@ -63,6 +63,7 @@ BlockDeviceInfo *bdrv_block_device_info(BlockBackend *blk,
 info->file   = g_strdup(bs->filename);
 info->ro = bdrv_is_read_only(bs);
 info->drv= g_strdup(bs->drv->format_name);
+info->active = !bdrv_is_inactive(bs);
 info->encrypted  = bs->encrypted;
 
 info->cache = g_new(BlockdevCacheInfo, 1);
diff --git a/tests/qemu-iotests/184.out b/tests/qemu-iotests/184.out
index e8f631f853..52692b6b3b 100644
--- a/tests/qemu-iotests/184.out
+++ b/tests/qemu-iotests/184.out
@@ -26,6 +26,7 @@ Testing:
 {
 "iops_rd": 0,
 "detect_zeroes": "off",
+"active": true,
 "image": {
 "backing-image": {
 "virtual-size": 1073741824,
@@ -59,6 +60,7 @@ Testing:
 {
 "iops_rd": 0,
 "detect_zeroes": "off",
+"active": true,
 "image": {
 "virtual-size": 1073741824,
 "filename": "null-co://",
diff --git a/tests/qemu-iotests/191.out b/tests/qemu-iotests/191.out
index c3309e4bc6..2a72ca7106 100644
--- a/tests/qemu-iotests/191.out
+++ b/tests/qemu-iotests/191.out
@@ -114,6 +114,7 @@ wrote 65536/65536 bytes at offset 1048576
 {
 "iops_rd": 0,
 "detect_zeroes": "off",
+"active": true,
 "image": {
 "backing-image": {
 "virtual-size": 67108864,
@@ -155,6 +156,7 @@ wrote 65536/65536 bytes at offset 1048576
 {
 "iops_rd": 0,
 "detect_zeroes": "off",
+"active": true,
 "image": {
 "virtual-size": 197120,
 "filename": "TEST_DIR/t.IMGFMT.ovl2",
@@ -183,6 +185,7 @@ wrote 65536/65536 bytes at offset 1048576
 {
 "iops_rd": 0,
 "detect_zeroes": "off",
+"active": true,
 "image": {
 "backing-image": {
 "virtual-size": 67108864,
@@ -224,6 +227,7 @@ wrote 65536/65536 bytes at offset 1048576
 {
 "iops_rd": 0,
 "detect_zeroes": "off",
+"active": true,
 "image": {
 "virtual-size": 197120,
 "filename": "TEST_DIR/t.IMGFMT",
@@ -252,6 +256,7 @@ wrote 65536/65536 bytes at offset 1048576
 {
 "iops_rd": 0,
 "detect_zeroes": "off",
+"active": true,