[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v1 02/13] qcow2: is_zero_sectors(): return true if a
From: |
Anton Nefedov |
Subject: |
[Qemu-devel] [PATCH v1 02/13] qcow2: is_zero_sectors(): return true if area is outside of backing file |
Date: |
Fri, 19 May 2017 12:34:29 +0300 |
in such case, bdrv_get_block_status() shall return 0, *nr == 0
iotest 154 updated accordingly: write-zeroes tail alignment can be detected
as zeroes now, so pwrite_zeroes succeeds
Signed-off-by: Anton Nefedov <address@hidden>
---
block/qcow2.c | 6 ++++--
tests/qemu-iotests/154.out | 4 ++--
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/block/qcow2.c b/block/qcow2.c
index 2e6a0ec..b885dfc 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -2482,7 +2482,7 @@ static bool is_zero_sectors(BlockDriverState *bs, int64_t
start,
int64_t res;
if (start + count > bs->total_sectors) {
- count = bs->total_sectors - start;
+ count = start < bs->total_sectors ? bs->total_sectors - start : 0;
}
if (!count) {
@@ -2490,7 +2490,9 @@ static bool is_zero_sectors(BlockDriverState *bs, int64_t
start,
}
res = bdrv_get_block_status_above(bs, NULL, start, count,
&nr, &file);
- return res >= 0 && (res & BDRV_BLOCK_ZERO) && nr == count;
+ return res >= 0
+ && (((res & BDRV_BLOCK_ZERO) && nr == count)
+ || nr == 0);
}
static coroutine_fn int qcow2_co_pwrite_zeroes(BlockDriverState *bs,
diff --git a/tests/qemu-iotests/154.out b/tests/qemu-iotests/154.out
index d8485ee..259340e 100644
--- a/tests/qemu-iotests/154.out
+++ b/tests/qemu-iotests/154.out
@@ -322,7 +322,7 @@ wrote 1024/1024 bytes at offset 134218240
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
2048/2048 bytes allocated at offset 128 MiB
[{ "start": 0, "length": 134217728, "depth": 1, "zero": true, "data": false},
-{ "start": 134217728, "length": 2048, "depth": 0, "zero": false, "data": true,
"offset": OFFSET}]
+{ "start": 134217728, "length": 2048, "depth": 0, "zero": true, "data": false}]
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134219776
backing_file=TEST_DIR/t.IMGFMT.base
wrote 2048/2048 bytes at offset 134217728
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
@@ -348,7 +348,7 @@ wrote 1024/1024 bytes at offset 134218240
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
2048/2048 bytes allocated at offset 128 MiB
[{ "start": 0, "length": 134217728, "depth": 1, "zero": true, "data": false},
-{ "start": 134217728, "length": 2048, "depth": 0, "zero": false, "data": true,
"offset": OFFSET}]
+{ "start": 134217728, "length": 2048, "depth": 0, "zero": true, "data": false}]
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134219776
backing_file=TEST_DIR/t.IMGFMT.base
wrote 2048/2048 bytes at offset 134217728
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
--
2.7.4
- [Qemu-devel] [PATCH v1 01/13] qcow2: alloc space for COW in one chunk, (continued)
[Qemu-devel] [PATCH v1 02/13] qcow2: is_zero_sectors(): return true if area is outside of backing file,
Anton Nefedov <=
[Qemu-devel] [PATCH v1 03/13] qcow2: do not COW the empty areas, Anton Nefedov, 2017/05/19
[Qemu-devel] [PATCH v1 05/13] qcow2: set inactive flag, Anton Nefedov, 2017/05/19