[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH 1/7] nbd/server: Fix blockstatus trace
From: |
Eric Blake |
Subject: |
[Qemu-block] [PATCH 1/7] nbd/server: Fix blockstatus trace |
Date: |
Tue, 2 Apr 2019 22:05:20 -0500 |
Don't increment remaining_bytes until we know that we will actually be
including the current block status extent in the reply; otherwise, the
value traced will include a bytes value that is oversized by the
length of the next block status extent which did not get sent because
it instead ended the loop.
Fixes: fb7afc79
Signed-off-by: Eric Blake <address@hidden>
---
nbd/server.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/nbd/server.c b/nbd/server.c
index 218a2aa5e65..1b8c8619896 100644
--- a/nbd/server.c
+++ b/nbd/server.c
@@ -1880,17 +1880,12 @@ static int blockstatus_to_extents(BlockDriverState *bs,
uint64_t offset,
flags = (ret & BDRV_BLOCK_ALLOCATED ? 0 : NBD_STATE_HOLE) |
(ret & BDRV_BLOCK_ZERO ? NBD_STATE_ZERO : 0);
- offset += num;
- remaining_bytes -= num;
if (first_extent) {
extent->flags = flags;
extent->length = num;
first_extent = false;
- continue;
- }
-
- if (flags == extent->flags) {
+ } else if (flags == extent->flags) {
/* extend current extent */
extent->length += num;
} else {
@@ -1903,6 +1898,8 @@ static int blockstatus_to_extents(BlockDriverState *bs,
uint64_t offset,
extent->flags = flags;
extent->length = num;
}
+ offset += num;
+ remaining_bytes -= num;
}
extents_end = extent + 1;
--
2.20.1
[Qemu-block] [PATCH 3/7] nbd/server: Don't fail NBD_OPT_INFO for byte-aligned sources, Eric Blake, 2019/04/02
[Qemu-block] [PATCH 4/7] iotests: Update 241 to expose backing layer fragmentation, Eric Blake, 2019/04/02