Blame SOURCES/kvm-nbd-client-Report-offsets-in-bdrv_block_status.patch

7711c0
From df5a366613d42ec2dc5dae33e10b6fdd5db09e0d Mon Sep 17 00:00:00 2001
7711c0
From: John Snow <jsnow@redhat.com>
7711c0
Date: Mon, 6 May 2019 17:56:19 +0200
7711c0
Subject: [PATCH 09/53] nbd/client: Report offsets in bdrv_block_status
7711c0
7711c0
RH-Author: John Snow <jsnow@redhat.com>
7711c0
Message-id: <20190506175629.11079-10-jsnow@redhat.com>
7711c0
Patchwork-id: 87199
7711c0
O-Subject: [RHEL-7.7 qemu-kvm-rhev PATCH 09/19] nbd/client: Report offsets in bdrv_block_status
7711c0
Bugzilla: 1692018
7711c0
RH-Acked-by: Max Reitz <mreitz@redhat.com>
7711c0
RH-Acked-by: Stefano Garzarella <sgarzare@redhat.com>
7711c0
RH-Acked-by: Thomas Huth <thuth@redhat.com>
7711c0
7711c0
From: Eric Blake <eblake@redhat.com>
7711c0
7711c0
It is desirable for 'qemu-img map' to have the same output for a file
7711c0
whether it is served over file or nbd protocols. However, ever since
7711c0
we implemented block status for NBD (2.12), the NBD protocol forgot to
7711c0
inform the block layer that as the final layer in the chain, the
7711c0
offset is valid; without an offset, the human-readable form of
7711c0
qemu-img map gives up with the unhelpful:
7711c0
7711c0
$ nbdkit -U - data data="1" size=512 --run 'qemu-img map $nbd'
7711c0
Offset          Length          Mapped to       File
7711c0
qemu-img: File contains external, encrypted or compressed clusters.
7711c0
7711c0
The --output=json form always works, because it is reporting the
7711c0
lower-level bdrv_block_status results directly rather than trying to
7711c0
filter out sparse ranges for human consumption - but now it also
7711c0
shows the offset member.
7711c0
7711c0
With this patch, the human output changes to:
7711c0
7711c0
Offset          Length          Mapped to       File
7711c0
0               0x200           0               nbd+unix://?socket=/tmp/nbdkitOxeoLa/socket
7711c0
7711c0
This change is observable to several iotests.
7711c0
7711c0
Fixes: 78a33ab5
7711c0
Reported-by: Richard W.M. Jones <rjones@redhat.com>
7711c0
Signed-off-by: Eric Blake <eblake@redhat.com>
7711c0
Message-Id: <20190329042750.14704-4-eblake@redhat.com>
7711c0
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
7711c0
(cherry picked from commit a62a85ef5ccd764d03d72d6c3cd558f9755b3457)
7711c0
Signed-off-by: John Snow <jsnow@redhat.com>
7711c0
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
7711c0
---
7711c0
 block/nbd-client.c         |  9 +++++++--
7711c0
 tests/qemu-iotests/209.out |  4 ++--
7711c0
 tests/qemu-iotests/223.out | 18 +++++++++---------
7711c0
 tests/qemu-iotests/241.out |  6 +++---
7711c0
 4 files changed, 21 insertions(+), 16 deletions(-)
7711c0
7711c0
diff --git a/block/nbd-client.c b/block/nbd-client.c
7711c0
index 09e20b2..9b5779f 100644
7711c0
--- a/block/nbd-client.c
7711c0
+++ b/block/nbd-client.c
7711c0
@@ -959,7 +959,9 @@ int coroutine_fn nbd_client_co_block_status(BlockDriverState *bs,
7711c0
 
7711c0
     if (!client->info.base_allocation) {
7711c0
         *pnum = bytes;
7711c0
-        return BDRV_BLOCK_DATA;
7711c0
+        *map = offset;
7711c0
+        *file = bs;
7711c0
+        return BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID;
7711c0
     }
7711c0
 
7711c0
     ret = nbd_co_send_request(bs, &request, NULL);
7711c0
@@ -982,8 +984,11 @@ int coroutine_fn nbd_client_co_block_status(BlockDriverState *bs,
7711c0
 
7711c0
     assert(extent.length);
7711c0
     *pnum = extent.length;
7711c0
+    *map = offset;
7711c0
+    *file = bs;
7711c0
     return (extent.flags & NBD_STATE_HOLE ? 0 : BDRV_BLOCK_DATA) |
7711c0
-           (extent.flags & NBD_STATE_ZERO ? BDRV_BLOCK_ZERO : 0);
7711c0
+        (extent.flags & NBD_STATE_ZERO ? BDRV_BLOCK_ZERO : 0) |
7711c0
+        BDRV_BLOCK_OFFSET_VALID;
7711c0
 }
7711c0
 
7711c0
 void nbd_client_detach_aio_context(BlockDriverState *bs)
7711c0
diff --git a/tests/qemu-iotests/209.out b/tests/qemu-iotests/209.out
7711c0
index 0d29724..214e27b 100644
7711c0
--- a/tests/qemu-iotests/209.out
7711c0
+++ b/tests/qemu-iotests/209.out
7711c0
@@ -1,2 +1,2 @@
7711c0
-[{ "start": 0, "length": 524288, "depth": 0, "zero": false, "data": true},
7711c0
-{ "start": 524288, "length": 524288, "depth": 0, "zero": true, "data": false}]
7711c0
+[{ "start": 0, "length": 524288, "depth": 0, "zero": false, "data": true, "offset": 0},
7711c0
+{ "start": 524288, "length": 524288, "depth": 0, "zero": true, "data": false, "offset": 524288}]
7711c0
diff --git a/tests/qemu-iotests/223.out b/tests/qemu-iotests/223.out
7711c0
index 0524ffb..a620f82 100644
7711c0
--- a/tests/qemu-iotests/223.out
7711c0
+++ b/tests/qemu-iotests/223.out
7711c0
@@ -67,18 +67,18 @@ read 1048576/1048576 bytes at offset 1048576
7711c0
 1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
7711c0
 read 2097152/2097152 bytes at offset 2097152
7711c0
 2 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
7711c0
-[{ "start": 0, "length": 4096, "depth": 0, "zero": false, "data": true},
7711c0
-{ "start": 4096, "length": 1044480, "depth": 0, "zero": true, "data": false},
7711c0
-{ "start": 1048576, "length": 3145728, "depth": 0, "zero": false, "data": true}]
7711c0
+[{ "start": 0, "length": 4096, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
7711c0
+{ "start": 4096, "length": 1044480, "depth": 0, "zero": true, "data": false, "offset": OFFSET},
7711c0
+{ "start": 1048576, "length": 3145728, "depth": 0, "zero": false, "data": true, "offset": OFFSET}]
7711c0
 [{ "start": 0, "length": 65536, "depth": 0, "zero": false, "data": false},
7711c0
-{ "start": 65536, "length": 2031616, "depth": 0, "zero": false, "data": true},
7711c0
+{ "start": 65536, "length": 2031616, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
7711c0
 { "start": 2097152, "length": 2097152, "depth": 0, "zero": false, "data": false}]
7711c0
 
7711c0
 === Contrast to small granularity dirty-bitmap ===
7711c0
 
7711c0
-[{ "start": 0, "length": 512, "depth": 0, "zero": false, "data": true},
7711c0
+[{ "start": 0, "length": 512, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
7711c0
 { "start": 512, "length": 512, "depth": 0, "zero": false, "data": false},
7711c0
-{ "start": 1024, "length": 2096128, "depth": 0, "zero": false, "data": true},
7711c0
+{ "start": 1024, "length": 2096128, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
7711c0
 { "start": 2097152, "length": 2097152, "depth": 0, "zero": false, "data": false}]
7711c0
 
7711c0
 === End qemu NBD server ===
7711c0
@@ -94,10 +94,10 @@ read 2097152/2097152 bytes at offset 2097152
7711c0
 === Use qemu-nbd as server ===
7711c0
 
7711c0
 [{ "start": 0, "length": 65536, "depth": 0, "zero": false, "data": false},
7711c0
-{ "start": 65536, "length": 2031616, "depth": 0, "zero": false, "data": true},
7711c0
+{ "start": 65536, "length": 2031616, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
7711c0
 { "start": 2097152, "length": 2097152, "depth": 0, "zero": false, "data": false}]
7711c0
-[{ "start": 0, "length": 512, "depth": 0, "zero": false, "data": true},
7711c0
+[{ "start": 0, "length": 512, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
7711c0
 { "start": 512, "length": 512, "depth": 0, "zero": false, "data": false},
7711c0
-{ "start": 1024, "length": 2096128, "depth": 0, "zero": false, "data": true},
7711c0
+{ "start": 1024, "length": 2096128, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
7711c0
 { "start": 2097152, "length": 2097152, "depth": 0, "zero": false, "data": false}]
7711c0
 *** done
7711c0
diff --git a/tests/qemu-iotests/241.out b/tests/qemu-iotests/241.out
7711c0
index b76a623..f22eabb 100644
7711c0
--- a/tests/qemu-iotests/241.out
7711c0
+++ b/tests/qemu-iotests/241.out
7711c0
@@ -4,7 +4,7 @@ QA output created by 241
7711c0
 
7711c0
   size:  1024
7711c0
   min block: 512
7711c0
-[{ "start": 0, "length": 1024, "depth": 0, "zero": false, "data": true}]
7711c0
+[{ "start": 0, "length": 1024, "depth": 0, "zero": false, "data": true, "offset": OFFSET}]
7711c0
 1 KiB (0x400) bytes     allocated at offset 0 bytes (0x0)
7711c0
 
7711c0
 === Exporting unaligned raw image, forced server sector alignment ===
7711c0
@@ -14,13 +14,13 @@ WARNING: Image format was not specified for '/home/eblake/qemu/tests/qemu-iotest
7711c0
          Specify the 'raw' format explicitly to remove the restrictions.
7711c0
   size:  1024
7711c0
   min block: 512
7711c0
-[{ "start": 0, "length": 1024, "depth": 0, "zero": false, "data": true}]
7711c0
+[{ "start": 0, "length": 1024, "depth": 0, "zero": false, "data": true, "offset": OFFSET}]
7711c0
 1 KiB (0x400) bytes     allocated at offset 0 bytes (0x0)
7711c0
 
7711c0
 === Exporting unaligned raw image, forced client sector alignment ===
7711c0
 
7711c0
   size:  1024
7711c0
   min block: 512
7711c0
-[{ "start": 0, "length": 1024, "depth": 0, "zero": false, "data": true}]
7711c0
+[{ "start": 0, "length": 1024, "depth": 0, "zero": false, "data": true, "offset": OFFSET}]
7711c0
 1 KiB (0x400) bytes     allocated at offset 0 bytes (0x0)
7711c0
 *** done
7711c0
-- 
7711c0
1.8.3.1
7711c0