Alberto Garcia 50a3efb0f0 block: Close a BlockDriverState completely even when bs->drv is NULL
bdrv_close() skips much of its logic when bs->drv is NULL. This is
fine when we're closing a BlockDriverState that has just been created
(because e.g the initialization process failed), but it's not enough
in other cases.

For example, when a valid qcow2 image is found to be corrupted then
QEMU marks it as such in the file header and then sets bs->drv to
NULL in order to make the BlockDriverState unusable. When that BDS is
later closed then many of its data structures are not freed (leaking
their memory) and none of its children are detached. This results in
bdrv_close_all() failing to close all BDSs and making this assertion
fail when QEMU is being shut down:

   bdrv_close_all: Assertion `QTAILQ_EMPTY(&all_bdrv_states)' failed.

This patch makes bdrv_close() do the full uninitialization process
in all cases. This fixes the problem with corrupted images and still
works fine with freshly created BDSs.

Signed-off-by: Alberto Garcia <berto@igalia.com>
Message-id: 20171106145345.12038-1-berto@igalia.com
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2017-11-21 14:54:02 +01: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
030
2017-11-14 18:06:25 +01:00
2016-04-15 17:22:11 +02:00
040
2017-11-14 18:06:25 +01:00
2017-07-11 17:45:02 +02:00
046
2017-05-11 11:08:40 +02:00
051
2017-09-26 14:46:23 +02:00
2017-09-26 14:46:23 +02:00
2017-09-26 14:46:23 +02:00
055
2017-11-14 18:06:25 +01:00
059
2017-08-01 18:09:33 +02:00
063
2017-08-01 18:09:33 +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
2017-09-26 14:46:23 +02:00
068
2017-09-06 15:19:01 +01:00
2017-09-06 15:19:01 +01:00
077
2017-11-14 18:06:25 +01:00
083
2017-11-14 18:06:25 +01:00
087
2017-11-17 18:21:31 +01:00
2016-01-07 21:30:17 +01:00
102
2017-09-26 15:00:32 +02:00
106
2017-09-26 15:00:32 +02:00
109
2017-08-08 14:36:59 +02:00
2015-12-18 14:36:17 +01:00
2017-07-10 13:18:05 +02:00
2017-05-11 14:28:07 +02:00
125
2017-10-26 15:01:14 +02:00
2017-10-26 15:01:14 +02:00
126
2017-07-11 17:45:00 +02:00
2017-07-11 17:45:00 +02:00
127
2017-10-26 15:01:13 +02:00
136
2017-11-14 18:06:25 +01:00
2016-05-19 16:45:31 +02:00
141
2017-08-01 18:09:33 +02:00
142
2017-07-11 17:45:00 +02:00
2017-07-10 13:18:05 +02:00
156
2017-08-01 18:09:33 +02:00
159
2017-07-11 17:44:59 +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
163
2017-09-26 15:00:32 +02:00
2017-09-26 15:00:32 +02:00
170
2017-07-11 17:44:59 +02:00
2016-09-20 22:10:57 +02:00
171
2017-07-11 17:45:00 +02:00
2017-09-18 19:43:38 -04:00
2017-02-12 00:47:42 +01:00
178
2017-07-11 17:45:01 +02:00
182
2017-11-17 13:35:59 +01:00
183
2017-06-09 11:45:03 +02:00
2017-06-09 11:45:03 +02:00
185
2017-08-11 14:44:39 +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.