Max Reitz a1406a9262 iotests: Test large write request to qcow2 file
Without HEAD^, the following happens when you attempt a large write
request to a qcow2 file such that the number of bytes covered by all
clusters involved in a single allocation will exceed INT_MAX:

(A) handle_alloc_space() decides to fill the whole area with zeroes and
    fails because bdrv_co_pwrite_zeroes() fails (the request is too
    large).

(B) If handle_alloc_space() does not do anything, but merge_cow()
    decides that the requests can be merged, it will create a too long
    IOV that later cannot be written.

(C) Otherwise, all parts will be written separately, so those requests
    will work.

In either B or C, though, qcow2_alloc_cluster_link_l2() will have an
overflow: We use an int (i) to iterate over nb_clusters, and then
calculate the L2 entry based on "i << s->cluster_bits" -- which will
overflow if the range covers more than INT_MAX bytes.  This then leads
to image corruption because the L2 entry will be wrong (it will be
recognized as a compressed cluster).

Even if that were not the case, the .cow_end area would be empty
(because handle_alloc() will cap avail_bytes and nb_bytes at INT_MAX, so
their difference (which is the .cow_end size) will be 0).

So this test checks that on such large requests, the image will not be
corrupted.  Unfortunately, we cannot check whether COW will be handled
correctly, because that data is discarded when it is written to null-co
(but we have to use null-co, because writing 2 GB of data in a test is
not quite reasonable).

Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2019-10-14 17:12:48 +02:00
..
2018-01-23 12:34:43 +01:00
028
2019-10-14 17:12:48 +02:00
2019-10-14 17:12:48 +02:00
2017-07-11 17:45:02 +02:00
2019-07-30 12:25:43 +02:00
052
2019-09-03 14:56:06 +02:00
2015-01-23 12:41:32 -05:00
2017-05-11 12:08:24 +02:00
2017-09-06 15:19:01 +01:00
2019-07-12 15:42:23 +02:00
2019-06-14 14:16:57 +02:00
091
2019-09-03 14:56:06 +02:00
093
2019-08-16 16:28:02 -04:00
2018-06-11 16:18:45 +02:00
2019-08-16 10:25:16 +02:00
125
2019-10-10 10:56:18 +02:00
2017-10-26 15:01:14 +02:00
2016-05-19 16:45:31 +02:00
138
2019-05-07 17:14:21 +02:00
2019-05-07 17:14:21 +02:00
141
2019-08-19 17:13:26 +02:00
147
2019-09-10 08:58:43 +02:00
2016-09-20 22:10:57 +02:00
2016-09-20 22:10:57 +02:00
162
2019-10-10 12:13:23 +02:00
2019-10-10 12:13:23 +02:00
2017-09-26 15:00:32 +02:00
2016-09-20 22:10:57 +02:00
2017-09-18 19:43:38 -04:00
2017-02-12 00:47:42 +01:00
183
2019-09-13 12:18:37 +02:00
192
2019-09-13 12:18:37 +02:00
194
2018-04-10 16:33:43 +02:00
205
2019-09-10 08:58:43 +02:00
207
2019-06-24 16:01:04 +02:00
2019-06-24 16:01:04 +02:00
209
2018-03-13 15:44:09 -05:00
210
2019-02-25 15:11:27 +01:00
211
2019-02-25 15:11:28 +01:00
212
2019-02-25 15:11:27 +01:00
213
2019-02-25 15:11:27 +01:00
2018-05-15 16:15:21 +02:00
219
2019-06-14 14:16:57 +02:00
222
2018-07-10 11:55:11 +02:00
223
2019-09-24 07:30:19 -05:00
2019-09-24 07:30:19 -05:00
2019-10-10 10:56:18 +02:00
228
2019-02-25 15:11:27 +01:00
2019-02-25 15:11:27 +01:00
232
2019-09-10 08:58:43 +02:00
2019-03-19 15:49:29 +01:00
233
2019-06-13 08:50:47 -05:00
2019-02-01 13:46:44 +01:00
237
2019-02-25 15:11:27 +01:00
238
2019-08-16 16:28:02 -04:00
2019-02-01 13:46:44 +01:00
2019-03-19 15:49:29 +01:00
250
2019-06-04 16:55:58 +02:00
2019-06-04 16:55:58 +02:00
254
2019-08-16 16:28:03 -04:00
2019-08-16 16:28:03 -04:00
255
2019-07-19 13:19:17 +02:00
263
2019-09-16 15:37:12 +02:00
2019-09-16 15:37:12 +02:00
266
2019-09-10 08:58:43 +02:00
2019-09-10 08:58:43 +02:00
2019-10-04 11:59:16 +02:00
2019-06-13 08:50:47 -05: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.