diff mbox

[v2,0/9] bdrv_open() cleanups, part 1

Message ID 53AC8DE9.4030001@redhat.com
State New
Headers show

Commit Message

Max Reitz June 26, 2014, 9:17 p.m. UTC
On 25.06.2014 16:35, Kevin Wolf wrote:
> This is the first part of an attempt for disentangling bdrv_open(). At the end
> of this series, bdrv_open() code is somewhat easier to read, but the real
> changes (including some bug fixes and changes of behaviour) haven't happened
> yet.
>
> Just sending out the first part now to get this merged early and avoid
> conflicts.
>
> v2:
> - Rebased on current git master
> - Patch 1: Removed redundant if condition [Benoît]
>             Replaced redundant error check with assertion [Eric]
> - Patch 2: Fixed leak in error path [Benoît]
>
> Kevin Wolf (9):
>    block: Create bdrv_fill_options()
>    block: Move bdrv_fill_options() call to bdrv_open()
>    block: Move json: parsing to bdrv_fill_options()
>    block: Always pass driver name through options QDict
>    block: Use common driver selection code for bdrv_open_file()
>    block: Inline bdrv_file_open()
>    block: Remove second bdrv_open() recursion
>    block: Catch backing files assigned to non-COW drivers
>    block: Remove a special case for protocols
>
>   block.c                    | 280 ++++++++++++++++++++++-----------------------
>   block/cow.c                |   1 +
>   block/qcow.c               |   1 +
>   block/qcow2.c              |   1 +
>   block/qed.c                |   1 +
>   block/vmdk.c               |   1 +
>   include/block/block_int.h  |   3 +
>   tests/qemu-iotests/051     |   6 +
>   tests/qemu-iotests/051.out |  14 ++-
>   9 files changed, 164 insertions(+), 144 deletions(-)

With this series, iotests 040, 041 and 067 fail for me. I attached the 
result.

Max
QEMU          -- /home/mreitz/projects/qemu/tests/qemu-iotests/qemu
QEMU_IMG      -- /home/mreitz/projects/qemu/tests/qemu-iotests/qemu-img
QEMU_IO       -- /home/mreitz/projects/qemu/tests/qemu-iotests/qemu-io 
QEMU_NBD      -- /home/mreitz/projects/qemu/tests/qemu-iotests/qemu-nbd
IMGFMT        -- qcow2 (compat=1.1)
IMGPROTO      -- file
PLATFORM      -- Linux/x86_64 dresden 3.14.5-200.fc20.x86_64
SOCKET_SCM_HELPER -- 

040 10s ...        [23:15:41] [23:15:52] [failed, exit status 1] - output mismatch (see 040.out.bad)
Failures: 040 041 067
Failed 3 of 3 tests

Comments

Eric Blake June 26, 2014, 9:46 p.m. UTC | #1
On 06/26/2014 03:17 PM, Max Reitz wrote:
> On 25.06.2014 16:35, Kevin Wolf wrote:
>> This is the first part of an attempt for disentangling bdrv_open(). At
>> the end
>> of this series, bdrv_open() code is somewhat easier to read, but the real
>> changes (including some bug fixes and changes of behaviour) haven't
>> happened
>> yet.
>>

> With this series, iotests 040, 041 and 067 fail for me. I attached the
> result.

Actually, it wasn't this series, but the qapi-as-event series.  See here
for more diagnosis and potential fixes:
https://lists.gnu.org/archive/html/qemu-devel/2014-06/msg06554.html
https://lists.gnu.org/archive/html/qemu-devel/2014-06/msg06499.html
Max Reitz June 26, 2014, 9:48 p.m. UTC | #2
On 26.06.2014 23:46, Eric Blake wrote:
> On 06/26/2014 03:17 PM, Max Reitz wrote:
>> On 25.06.2014 16:35, Kevin Wolf wrote:
>>> This is the first part of an attempt for disentangling bdrv_open(). At
>>> the end
>>> of this series, bdrv_open() code is somewhat easier to read, but the real
>>> changes (including some bug fixes and changes of behaviour) haven't
>>> happened
>>> yet.
>>>
>> With this series, iotests 040, 041 and 067 fail for me. I attached the
>> result.
> Actually, it wasn't this series, but the qapi-as-event series.  See here
> for more diagnosis and potential fixes:
> https://lists.gnu.org/archive/html/qemu-devel/2014-06/msg06554.html
> https://lists.gnu.org/archive/html/qemu-devel/2014-06/msg06499.html

Ah, great, looking for the error here would have probably been rather 
interesting.

Max
diff mbox

Patch

--- 040.out	2014-06-26 23:10:00.591073323 +0200
+++ 040.out.bad	2014-06-26 23:15:52.102465884 +0200
@@ -1,5 +1,47 @@ 
-........................
+.....F.......F.......F..
+======================================================================
+FAIL: test_top_is_active (__main__.TestActiveZeroLengthImage)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./040", line 112, in test_top_is_active
+    self.run_commit_test(test_img, backing_img, need_ready=True)
+  File "./040", line 57, in run_commit_test
+    self.assert_qmp(event, 'data/type', 'commit')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_top_is_active (__main__.TestRelativePaths)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./040", line 202, in test_top_is_active
+    self.run_commit_test(self.test_img, self.backing_img)
+  File "./040", line 57, in run_commit_test
+    self.assert_qmp(event, 'data/type', 'commit')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_top_is_active (__main__.TestSingleDrive)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./040", line 112, in test_top_is_active
+    self.run_commit_test(test_img, backing_img, need_ready=True)
+  File "./040", line 57, in run_commit_test
+    self.assert_qmp(event, 'data/type', 'commit')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
 ----------------------------------------------------------------------
 Ran 24 tests
 
-OK
+FAILED (failures=3)
041 17s ...        [23:15:52] [23:16:21] [failed, exit status 1] - output mismatch (see 041.out.bad)
--- 041.out	2014-06-26 23:10:00.591073323 +0200
+++ 041.out.bad	2014-06-26 23:16:21.502833277 +0200
@@ -1,5 +1,399 @@ 
-...................................
+FEFFFFFF..FF.FF..F.FFF.FF...FFFFFFFF
+======================================================================
+ERROR: test_cancel (__main__.TestMirrorNoBacking)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 235, in tearDown
+    os.remove(target_backing_img)
+OSError: [Errno 2] No such file or directory: '/home/mreitz/projects/qemu/tests/qemu-iotests/scratch/target-backing.img'
+
+======================================================================
+FAIL: test_cancel (__main__.TestMirrorNoBacking)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 261, in test_cancel
+    self.wait_ready_and_cancel()
+  File "./041", line 45, in wait_ready_and_cancel
+    self.wait_ready(drive)
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_complete (__main__.TestMirrorNoBacking)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 246, in test_complete
+    self.complete_and_wait()
+  File "./041", line 219, in complete_and_wait
+    return ImageMirroringTestCase.complete_and_wait(self, drive, wait_ready)
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_large_cluster (__main__.TestMirrorNoBacking)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 282, in test_large_cluster
+    self.complete_and_wait()
+  File "./041", line 219, in complete_and_wait
+    return ImageMirroringTestCase.complete_and_wait(self, drive, wait_ready)
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_complete_full (__main__.TestMirrorResized)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 330, in test_complete_full
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_complete_top (__main__.TestMirrorResized)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 316, in test_complete_top
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_ignore_read (__main__.TestReadErrors)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 428, in test_ignore_read
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_large_cluster (__main__.TestReadErrors)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 449, in test_large_cluster
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_set_speed (__main__.TestSetSpeed)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 654, in test_set_speed
+    self.wait_ready_and_cancel()
+  File "./041", line 45, in wait_ready_and_cancel
+    self.wait_ready(drive)
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_set_speed_invalid (__main__.TestSetSpeed)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 683, in test_set_speed_invalid
+    self.wait_ready_and_cancel()
+  File "./041", line 45, in wait_ready_and_cancel
+    self.wait_ready(drive)
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_cancel_after_ready (__main__.TestSingleDrive)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 114, in test_cancel_after_ready
+    self.wait_ready_and_cancel()
+  File "./041", line 45, in wait_ready_and_cancel
+    self.wait_ready(drive)
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_complete (__main__.TestSingleDrive)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 88, in test_complete
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_large_cluster (__main__.TestSingleDrive)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 187, in test_large_cluster
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_pause (__main__.TestSingleDrive)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 142, in test_pause
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_small_buffer (__main__.TestSingleDrive)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 155, in test_small_buffer
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_small_buffer2 (__main__.TestSingleDrive)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 171, in test_small_buffer2
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_cancel_after_ready (__main__.TestSingleDriveZeroLength)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 114, in test_cancel_after_ready
+    self.wait_ready_and_cancel()
+  File "./041", line 45, in wait_ready_and_cancel
+    self.wait_ready(drive)
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_complete (__main__.TestSingleDriveZeroLength)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 88, in test_complete
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_pause (__main__.TestSingleDriveZeroLength)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 142, in test_pause
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_small_buffer (__main__.TestSingleDriveZeroLength)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 155, in test_small_buffer
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_absolute_paths_full (__main__.TestUnbackedSource)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 705, in test_absolute_paths_full
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_absolute_paths_none (__main__.TestUnbackedSource)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 723, in test_absolute_paths_none
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_absolute_paths_top (__main__.TestUnbackedSource)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 714, in test_absolute_paths_top
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': u'drive0'}"
+
+======================================================================
+FAIL: test_ignore_write (__main__.TestWriteErrors)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 576, in test_ignore_write
+    self.assert_qmp(event, 'data/device', 'drive0')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 233, in assert_qmp
+    self.assertEqual(result, value, 'values not equal "%s" and "%s"' % (str(result), str(value)))
+AssertionError: values not equal "" and "drive0"
+
+======================================================================
+FAIL: test_report_write (__main__.TestWriteErrors)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 550, in test_report_write
+    self.assert_qmp(event, 'data/device', 'drive0')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 233, in assert_qmp
+    self.assertEqual(result, value, 'values not equal "%s" and "%s"' % (str(result), str(value)))
+AssertionError: values not equal "" and "drive0"
+
+======================================================================
+FAIL: test_stop_write (__main__.TestWriteErrors)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 596, in test_stop_write
+    self.assert_qmp(event, 'data/device', 'drive0')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 233, in assert_qmp
+    self.assertEqual(result, value, 'values not equal "%s" and "%s"' % (str(result), str(value)))
+AssertionError: values not equal "" and "drive0"
+
 ----------------------------------------------------------------------
 Ran 35 tests
 
-OK
+FAILED (failures=25, errors=1)
067 1s ...        [23:16:21] [23:16:21] - output mismatch (see 067.out.bad)
--- 067.out	2014-06-26 23:10:00.593073348 +0200
+++ 067.out.bad	2014-06-26 23:16:21.883838039 +0200
@@ -9,7 +9,6 @@ 
 {"return": [{"io-status": "ok", "device": "disk", "locked": false, "removable": false, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]}
 {"return": {}}
 {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "DEVICE_DELETED", "data": {"path": "/machine/peripheral/virtio0/virtio-backend"}}
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "DEVICE_DELETED", "data": {"device": "virtio0", "path": "/machine/peripheral/virtio0"}}
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "RESET"}
 {"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]}
@@ -28,7 +27,6 @@ 
 {"return": {}}
 {"return": {}}
 {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "DEVICE_DELETED", "data": {"path": "/machine/peripheral/virtio0/virtio-backend"}}
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "DEVICE_DELETED", "data": {"device": "virtio0", "path": "/machine/peripheral/virtio0"}}
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "RESET"}
 {"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]}
@@ -48,7 +46,6 @@ 
 {"return": {}}
 {"return": {}}
 {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "DEVICE_DELETED", "data": {"path": "/machine/peripheral/virtio0/virtio-backend"}}
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "DEVICE_DELETED", "data": {"device": "virtio0", "path": "/machine/peripheral/virtio0"}}
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "RESET"}
 {"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]}
@@ -68,7 +65,6 @@ 
 {"return": {}}
 {"return": {}}
 {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "DEVICE_DELETED", "data": {"path": "/machine/peripheral/virtio0/virtio-backend"}}
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "DEVICE_DELETED", "data": {"device": "virtio0", "path": "/machine/peripheral/virtio0"}}
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "RESET"}
 {"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"io-status": "ok", "device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]}