Eric Blake c61e684e44 block: Exploit BDRV_BLOCK_EOF for larger zero blocks
When we have a BDS with unallocated clusters, but asking the status
of its underlying bs->file or backing layer encounters an end-of-file
condition, we know that the rest of the unallocated area will read as
zeroes.  However, pre-patch, this required two separate calls to
bdrv_get_block_status(), as the first call stops at the point where
the underlying file ends.  Thanks to BDRV_BLOCK_EOF, we can now widen
the results of the primary status if the secondary status already
includes BDRV_BLOCK_ZERO.

In turn, this fixes a TODO mentioned in iotest 154, where we can now
see that all sectors in a partial cluster at the end of a file read
as zero when coupling the shorter backing file's status along with our
knowledge that the remaining sectors came from an unallocated cluster.

Also, note that the loop in bdrv_co_get_block_status_above() had an
inefficent exit: in cases where the active layer sets BDRV_BLOCK_ZERO
but does NOT set BDRV_BLOCK_ALLOCATED (namely, where we know we read
zeroes merely because our unallocated clusters lie beyond the backing
file's shorter length), we still ended up probing the backing layer
even though we already had a good answer.

Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <20170505021500.19315-3-eblake@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Fam Zheng <famz@redhat.com>
2017-06-30 21:48:06 +08:00
..
026
2017-04-27 15:46:16 +02:00
2017-04-27 15:46:16 +02:00
2017-04-27 15:46:16 +02:00
2016-04-15 17:22:11 +02:00
046
2017-05-11 11:08:40 +02:00
051
2017-04-27 15:39:49 +02:00
2015-01-23 12:41:32 -05:00
066
2017-05-11 12:08:24 +02:00
2017-05-11 12:08:24 +02:00
068
2017-06-26 14:51:13 +02:00
2017-06-26 14:51:13 +02:00
083
2016-05-12 15:33:23 +02:00
2017-06-06 20:18:36 +02:00
085
2017-05-11 11:08:40 +02:00
2016-01-07 21:30:17 +01:00
2015-12-18 14:36:17 +01:00
2017-05-11 14:28:07 +02:00
2016-05-19 16:45:31 +02:00
157
2016-07-13 13:41:39 +02:00
159
2016-09-20 22:10:57 +02:00
2016-09-20 22:10:57 +02:00
160
2016-09-20 22:10:57 +02:00
2016-09-20 22:10:57 +02:00
170
2016-09-20 22:10:57 +02:00
2016-09-20 22:10:57 +02:00
174
2017-02-12 00:47:42 +01:00
2017-02-12 00:47:42 +01:00
181
2017-04-27 15:39:49 +02:00
2017-04-27 15:39:49 +02:00
183
2017-06-09 11:45:03 +02:00
2017-06-09 11:45:03 +02:00
2017-04-28 18:40:41 +02:00
2017-04-27 15:39:50 +02:00
2017-04-27 15:39:50 +02:00

=== This is the QEMU I/O test suite ===

* Intro

This package contains a simple test suite for the I/O layer of qemu.
It does not require a guest, but only the qemu, qemu-img and qemu-io
binaries.  This does limit it to exercise the low-level I/O path only
but no actual block drivers like ide, scsi or virtio.

* Usage

Just run ./check to run all tests for the raw image format, or ./check
-qcow2 to test the qcow2 image format.  The output of ./check -h explains
additional options to test further image formats or I/O methods.

* Feedback and patches

Please send improvements to the test suite, general feedback or just
reports of failing tests cases to qemu-devel@nongnu.org with a CC:
to qemu-block@nongnu.org.