Re: [PULL 00/64] Block layer patches

2020-09-08 Thread Max Reitz
On 08.09.20 09:01, Kevin Wolf wrote:
> Am 07.09.2020 um 22:22 hat Peter Maydell geschrieben:
>> On Mon, 7 Sep 2020 at 12:09, Kevin Wolf  wrote:
>>>
>>> The following changes since commit 7c37270b3fbe3d034ba80e488761461676e21eb4:
>>>
>>>   Merge remote-tracking branch 
>>> 'remotes/kraxel/tags/ui-20200904-pull-request' into staging (2020-09-06 
>>> 16:23:55 +0100)
>>>
>>> are available in the Git repository at:
>>>
>>>   git://repo.or.cz/qemu/kevin.git tags/for-upstream
>>>
>>> for you to fetch changes up to 4cc0ec9b1b8830f7d1fcf5dfded19ef070f98eaa:
>>>
>>>   block/nvme: Pair doorbell registers (2020-09-07 12:47:57 +0200)
>>>
>>> 
>>> Block layer patches:
>>>
>>> - qemu-img create: Fail gracefully when backing file is an empty string
>>> - Fixes related to filter block nodes ("Deal with filters" series)
>>> - block/nvme: Various cleanups required to use multiple queues
>>> - block/nvme: Use NvmeBar structure from "block/nvme.h"
>>> - file-win32: Fix "locking" option
>>> - iotests: Allow running from different directory
>>
>> Fails in make check on iotests 040 and/or 041, various hosts:
>>
>> s390x linux:
>>
>>   TESTiotest-qcow2: 041 [fail]
>> QEMU  --
>> "/home/ubuntu/qemu/build/all/tests/qemu-iotests/../../qemu-system-s390x"
>> -nodefaults -display none -accel qtest
>> QEMU_IMG  -- 
>> "/home/ubuntu/qemu/build/all/tests/qemu-iotests/../../qemu-img"
>> QEMU_IO   --
>> "/home/ubuntu/qemu/build/all/tests/qemu-iotests/../../qemu-io"
>> --cache writeback --aio threads -f qcow2
>> QEMU_NBD  -- 
>> "/home/ubuntu/qemu/build/all/tests/qemu-iotests/../../qemu-nbd"
>> IMGFMT-- qcow2 (compat=1.1)
>> IMGPROTO  -- file
>> PLATFORM  -- Linux/s390x qemu01 4.15.0-72-generic
>> TEST_DIR  -- /home/ubuntu/qemu/build/all/tests/qemu-iotests/scratch
>> SOCK_DIR  -- /tmp/tmp.5Tpl6u2SCo
>> SOCKET_SCM_HELPER --
>> /home/ubuntu/qemu/build/all/tests/qemu-iotests/socket_scm_helper
>>
>> --- /home/ubuntu/qemu/tests/qemu-iotests/041.out2020-09-07
>> 14:29:45.468466636 -0400
>> +++ /home/ubuntu/qemu/build/all/tests/qemu-iotests/041.out.bad
>> 2020-09-07 14:43:41.494989911 -0400
>> @@ -1,5 +1,29 @@
>> -...
>> +.FF
>> +==
>> +FAIL: test_explicit_mirror_filter (__main__.TestFilters)
>> +--
>> +Traceback (most recent call last):
>> +  File "041", line 1415, in test_explicit_mirror_filter
>> +self.assert_qmp(result, 'return', {})
>> +  File "/home/ubuntu/qemu/tests/qemu-iotests/iotests.py", line 888,
>> in assert_qmp
>> +result = self.dictpath(d, path)
>> +  File "/home/ubuntu/qemu/tests/qemu-iotests/iotests.py", line 862, in 
>> dictpath
>> +self.fail(f'failed path traversal for "{path}" in "{d}"')
>> +AssertionError: failed path traversal for "return" in "{'error':
>> {'class': 'GenericError', 'desc': "Device 'virtio-blk-ccw' can't go on
>> PCI bus"}}"
> 
> Max, any specific reason you specified the bus in device_add?

No, I don’t think so.

> This seems to fix it for me. Do you agree with the change?
> 
> diff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041
> index cdbef3ba20..203ed58868 100755
> --- a/tests/qemu-iotests/041
> +++ b/tests/qemu-iotests/041
> @@ -1376,7 +1376,6 @@ class TestFilters(iotests.QMPTestCase):
>  result = self.vm.qmp('device_add',
>   driver='virtio-blk',
>   id='virtio',
> - bus='pci.0',
>   drive='source')
>  self.assert_qmp(result, 'return', {})
> 
> @@ -1410,7 +1409,6 @@ class TestFilters(iotests.QMPTestCase):
>  result = self.vm.qmp('device_add',
>   driver='virtio-blk',
>   id='virtio',
> - bus='pci.0',
>   drive='source')
>  self.assert_qmp(result, 'return', {})

Partially – this still fails on FreeBSD just like 040 fails.  So as
discussed on IRC, we should probably make this add a scsi-hd device and
add a virtio-scsi device to the VM in setUp().

[...]

>> freebsd:
>>
>>   TESTiotest-qcow2: 040 [fail]
>> QEMU  --
>> "/usr/home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/../../qemu-system-aarch64"
>> -nodefaults -display none -accel qtest -machine virt
>> QEMU_IMG  --
>> "/usr/home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/../../qemu-img"
>> QEMU_IO   --
>> "/usr/home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/../../qemu-io"
>>  --cache writeback --aio threads -f qcow2
>> QEMU_NBD  --
>> 

Re: [PULL 00/64] Block layer patches

2020-09-08 Thread Kevin Wolf
Am 07.09.2020 um 22:22 hat Peter Maydell geschrieben:
> On Mon, 7 Sep 2020 at 12:09, Kevin Wolf  wrote:
> >
> > The following changes since commit 7c37270b3fbe3d034ba80e488761461676e21eb4:
> >
> >   Merge remote-tracking branch 
> > 'remotes/kraxel/tags/ui-20200904-pull-request' into staging (2020-09-06 
> > 16:23:55 +0100)
> >
> > are available in the Git repository at:
> >
> >   git://repo.or.cz/qemu/kevin.git tags/for-upstream
> >
> > for you to fetch changes up to 4cc0ec9b1b8830f7d1fcf5dfded19ef070f98eaa:
> >
> >   block/nvme: Pair doorbell registers (2020-09-07 12:47:57 +0200)
> >
> > 
> > Block layer patches:
> >
> > - qemu-img create: Fail gracefully when backing file is an empty string
> > - Fixes related to filter block nodes ("Deal with filters" series)
> > - block/nvme: Various cleanups required to use multiple queues
> > - block/nvme: Use NvmeBar structure from "block/nvme.h"
> > - file-win32: Fix "locking" option
> > - iotests: Allow running from different directory
> 
> Fails in make check on iotests 040 and/or 041, various hosts:
> 
> s390x linux:
> 
>   TESTiotest-qcow2: 041 [fail]
> QEMU  --
> "/home/ubuntu/qemu/build/all/tests/qemu-iotests/../../qemu-system-s390x"
> -nodefaults -display none -accel qtest
> QEMU_IMG  -- 
> "/home/ubuntu/qemu/build/all/tests/qemu-iotests/../../qemu-img"
> QEMU_IO   --
> "/home/ubuntu/qemu/build/all/tests/qemu-iotests/../../qemu-io"
> --cache writeback --aio threads -f qcow2
> QEMU_NBD  -- 
> "/home/ubuntu/qemu/build/all/tests/qemu-iotests/../../qemu-nbd"
> IMGFMT-- qcow2 (compat=1.1)
> IMGPROTO  -- file
> PLATFORM  -- Linux/s390x qemu01 4.15.0-72-generic
> TEST_DIR  -- /home/ubuntu/qemu/build/all/tests/qemu-iotests/scratch
> SOCK_DIR  -- /tmp/tmp.5Tpl6u2SCo
> SOCKET_SCM_HELPER --
> /home/ubuntu/qemu/build/all/tests/qemu-iotests/socket_scm_helper
> 
> --- /home/ubuntu/qemu/tests/qemu-iotests/041.out2020-09-07
> 14:29:45.468466636 -0400
> +++ /home/ubuntu/qemu/build/all/tests/qemu-iotests/041.out.bad
> 2020-09-07 14:43:41.494989911 -0400
> @@ -1,5 +1,29 @@
> -...
> +.FF
> +==
> +FAIL: test_explicit_mirror_filter (__main__.TestFilters)
> +--
> +Traceback (most recent call last):
> +  File "041", line 1415, in test_explicit_mirror_filter
> +self.assert_qmp(result, 'return', {})
> +  File "/home/ubuntu/qemu/tests/qemu-iotests/iotests.py", line 888,
> in assert_qmp
> +result = self.dictpath(d, path)
> +  File "/home/ubuntu/qemu/tests/qemu-iotests/iotests.py", line 862, in 
> dictpath
> +self.fail(f'failed path traversal for "{path}" in "{d}"')
> +AssertionError: failed path traversal for "return" in "{'error':
> {'class': 'GenericError', 'desc': "Device 'virtio-blk-ccw' can't go on
> PCI bus"}}"

Max, any specific reason you specified the bus in device_add?

This seems to fix it for me. Do you agree with the change?

diff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041
index cdbef3ba20..203ed58868 100755
--- a/tests/qemu-iotests/041
+++ b/tests/qemu-iotests/041
@@ -1376,7 +1376,6 @@ class TestFilters(iotests.QMPTestCase):
 result = self.vm.qmp('device_add',
  driver='virtio-blk',
  id='virtio',
- bus='pci.0',
  drive='source')
 self.assert_qmp(result, 'return', {})

@@ -1410,7 +1409,6 @@ class TestFilters(iotests.QMPTestCase):
 result = self.vm.qmp('device_add',
  driver='virtio-blk',
  id='virtio',
- bus='pci.0',
  drive='source')
 self.assert_qmp(result, 'return', {})


> +==
> +FAIL: test_implicit_mirror_filter (__main__.TestFilters)
> +--
> +Traceback (most recent call last):
> +  File "041", line 1381, in test_implicit_mirror_filter
> +self.assert_qmp(result, 'return', {})
> +  File "/home/ubuntu/qemu/tests/qemu-iotests/iotests.py", line 888,
> in assert_qmp
> +result = self.dictpath(d, path)
> +  File "/home/ubuntu/qemu/tests/qemu-iotests/iotests.py", line 862, in 
> dictpath
> +self.fail(f'failed path traversal for "{path}" in "{d}"')
> +AssertionError: failed path traversal for "return" in "{'error':
> {'class': 'GenericError', 'desc': "Device 'virtio-blk-ccw' can't go on
> PCI bus"}}"
> +
>  --
>  Ran 107 tests
> 
> 

Re: [PULL 00/64] Block layer patches

2020-09-07 Thread Peter Maydell
On Mon, 7 Sep 2020 at 12:09, Kevin Wolf  wrote:
>
> The following changes since commit 7c37270b3fbe3d034ba80e488761461676e21eb4:
>
>   Merge remote-tracking branch 'remotes/kraxel/tags/ui-20200904-pull-request' 
> into staging (2020-09-06 16:23:55 +0100)
>
> are available in the Git repository at:
>
>   git://repo.or.cz/qemu/kevin.git tags/for-upstream
>
> for you to fetch changes up to 4cc0ec9b1b8830f7d1fcf5dfded19ef070f98eaa:
>
>   block/nvme: Pair doorbell registers (2020-09-07 12:47:57 +0200)
>
> 
> Block layer patches:
>
> - qemu-img create: Fail gracefully when backing file is an empty string
> - Fixes related to filter block nodes ("Deal with filters" series)
> - block/nvme: Various cleanups required to use multiple queues
> - block/nvme: Use NvmeBar structure from "block/nvme.h"
> - file-win32: Fix "locking" option
> - iotests: Allow running from different directory

Fails in make check on iotests 040 and/or 041, various hosts:

s390x linux:

  TESTiotest-qcow2: 041 [fail]
QEMU  --
"/home/ubuntu/qemu/build/all/tests/qemu-iotests/../../qemu-system-s390x"
-nodefaults -display none -accel qtest
QEMU_IMG  -- "/home/ubuntu/qemu/build/all/tests/qemu-iotests/../../qemu-img"
QEMU_IO   --
"/home/ubuntu/qemu/build/all/tests/qemu-iotests/../../qemu-io"
--cache writeback --aio threads -f qcow2
QEMU_NBD  -- "/home/ubuntu/qemu/build/all/tests/qemu-iotests/../../qemu-nbd"
IMGFMT-- qcow2 (compat=1.1)
IMGPROTO  -- file
PLATFORM  -- Linux/s390x qemu01 4.15.0-72-generic
TEST_DIR  -- /home/ubuntu/qemu/build/all/tests/qemu-iotests/scratch
SOCK_DIR  -- /tmp/tmp.5Tpl6u2SCo
SOCKET_SCM_HELPER --
/home/ubuntu/qemu/build/all/tests/qemu-iotests/socket_scm_helper

--- /home/ubuntu/qemu/tests/qemu-iotests/041.out2020-09-07
14:29:45.468466636 -0400
+++ /home/ubuntu/qemu/build/all/tests/qemu-iotests/041.out.bad
2020-09-07 14:43:41.494989911 -0400
@@ -1,5 +1,29 @@
-...
+.FF
+==
+FAIL: test_explicit_mirror_filter (__main__.TestFilters)
+--
+Traceback (most recent call last):
+  File "041", line 1415, in test_explicit_mirror_filter
+self.assert_qmp(result, 'return', {})
+  File "/home/ubuntu/qemu/tests/qemu-iotests/iotests.py", line 888,
in assert_qmp
+result = self.dictpath(d, path)
+  File "/home/ubuntu/qemu/tests/qemu-iotests/iotests.py", line 862, in dictpath
+self.fail(f'failed path traversal for "{path}" in "{d}"')
+AssertionError: failed path traversal for "return" in "{'error':
{'class': 'GenericError', 'desc': "Device 'virtio-blk-ccw' can't go on
PCI bus"}}"
+
+==
+FAIL: test_implicit_mirror_filter (__main__.TestFilters)
+--
+Traceback (most recent call last):
+  File "041", line 1381, in test_implicit_mirror_filter
+self.assert_qmp(result, 'return', {})
+  File "/home/ubuntu/qemu/tests/qemu-iotests/iotests.py", line 888,
in assert_qmp
+result = self.dictpath(d, path)
+  File "/home/ubuntu/qemu/tests/qemu-iotests/iotests.py", line 862, in dictpath
+self.fail(f'failed path traversal for "{path}" in "{d}"')
+AssertionError: failed path traversal for "return" in "{'error':
{'class': 'GenericError', 'desc': "Device 'virtio-blk-ccw' can't go on
PCI bus"}}"
+
 --
 Ran 107 tests

-OK
+FAILED (failures=2)


freebsd:

  TESTiotest-qcow2: 040 [fail]
QEMU  --
"/usr/home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/../../qemu-system-aarch64"
-nodefaults -display none -accel qtest -machine virt
QEMU_IMG  --
"/usr/home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/../../qemu-img"
QEMU_IO   --
"/usr/home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/../../qemu-io"
 --cache writeback --aio threads -f qcow2
QEMU_NBD  --
"/usr/home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/../../qemu-nbd"
IMGFMT-- qcow2 (compat=1.1)
IMGPROTO  -- file
PLATFORM  -- FreeBSD/amd64 freebsd 12.1-RELEASE
TEST_DIR  -- /home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/scratch
SOCK_DIR  -- /tmp/tmp.gaJ11NA1
SOCKET_SCM_HELPER --

--- /home/qemu/qemu-test.6pxNB5/src/tests/qemu-iotests/040.out
2020-09-07 18:29:28.0 +
+++ /home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/040.out.bad
 2020-09-07 18:37:26.783967000 +
@@ -1,5 +1,17 @@
-.
+F

[PULL 00/64] Block layer patches

2020-09-07 Thread Kevin Wolf
The following changes since commit 7c37270b3fbe3d034ba80e488761461676e21eb4:

  Merge remote-tracking branch 'remotes/kraxel/tags/ui-20200904-pull-request' 
into staging (2020-09-06 16:23:55 +0100)

are available in the Git repository at:

  git://repo.or.cz/qemu/kevin.git tags/for-upstream

for you to fetch changes up to 4cc0ec9b1b8830f7d1fcf5dfded19ef070f98eaa:

  block/nvme: Pair doorbell registers (2020-09-07 12:47:57 +0200)


Block layer patches:

- qemu-img create: Fail gracefully when backing file is an empty string
- Fixes related to filter block nodes ("Deal with filters" series)
- block/nvme: Various cleanups required to use multiple queues
- block/nvme: Use NvmeBar structure from "block/nvme.h"
- file-win32: Fix "locking" option
- iotests: Allow running from different directory


Connor Kuehl (1):
  block: Raise an error when backing file parameter is an empty string

Kevin Wolf (2):
  iotests: Allow running from different directory
  file-win32: Fix "locking" option

Max Reitz (43):
  block: Add child access functions
  block: Add chain helper functions
  block: bdrv_cow_child() for bdrv_has_zero_init()
  block: bdrv_set_backing_hd() is about bs->backing
  block: Include filters when freezing backing chain
  block: Drop bdrv_is_encrypted()
  block: Add bdrv_supports_compressed_writes()
  throttle: Support compressed writes
  copy-on-read: Support compressed writes
  block: Use bdrv_filter_(bs|child) where obvious
  block: Use CAFs in block status functions
  stream: Deal with filters
  block: Use CAFs when working with backing chains
  block: Use bdrv_cow_child() in bdrv_co_truncate()
  block: Re-evaluate backing file handling in reopen
  block: Flush all children in generic code
  vmdk: Drop vmdk_co_flush()
  block: Iterate over children in refresh_limits
  block: Use CAFs in bdrv_refresh_filename()
  block: Use CAF in bdrv_co_rw_vmstate()
  block/snapshot: Fix fallback
  block: Use CAFs for debug breakpoints
  block: Improve get_allocated_file_size's default
  block/null: Implement bdrv_get_allocated_file_size
  blockdev: Use CAF in external_snapshot_prepare()
  block: Report data child for query-blockstats
  block: Use child access functions for QAPI queries
  block-copy: Use CAF to find sync=top base
  mirror: Deal with filters
  backup: Deal with filters
  commit: Deal with filters
  nbd: Use CAF when looking for dirty bitmap
  qemu-img: Use child access functions
  block: Drop backing_bs()
  blockdev: Fix active commit choice
  block: Inline bdrv_co_block_status_from_*()
  block: Leave BDS.backing_{file,format} constant
  iotests: Test that qcow2's data-file is flushed
  iotests: Let complete_and_wait() work with commit
  iotests: Add filter commit test cases
  iotests: Add filter mirror test cases
  iotests: Add test for commit in sub directory
  iotests: Test committing to overridden backing

Philippe Mathieu-Daudé (18):
  block/nvme: Replace magic value by SCALE_MS definition
  block/nvme: Avoid further processing if trace event not enabled
  block/nvme: Let nvme_create_queue_pair() fail gracefully
  block/nvme: Define INDEX macros to ease code review
  block/nvme: Improve error message when IO queue creation failed
  block/nvme: Use common error path in nvme_add_io_queue()
  block/nvme: Rename local variable
  block/nvme: Use union of NvmeIdCtrl / NvmeIdNs structures
  block/nvme: Replace qemu_try_blockalign0 by qemu_try_blockalign/memset
  block/nvme: Replace qemu_try_blockalign(bs) by qemu_try_memalign(pg_sz)
  block/nvme: Simplify nvme_init_queue() arguments
  block/nvme: Replace BDRV_POLL_WHILE by AIO_WAIT_WHILE
  block/nvme: Simplify nvme_create_queue_pair() arguments
  block/nvme: Extract nvme_poll_queue()
  block/nvme: Use an array of EventNotifier
  block/nvme: Group controller registers in NVMeRegs structure
  block/nvme: Use generic NvmeBar structure
  block/nvme: Pair doorbell registers

 qapi/block-core.json   |  58 +++--
 include/block/block.h  |   2 +-
 include/block/block_int.h  |  95 +---
 block.c| 492 +
 block/backup-top.c |   4 +-
 block/backup.c |   9 +-
 block/blkdebug.c   |   7 +-
 block/blklogwrites.c   |   1 -
 block/block-backend.c  |   7 +-
 block/block-copy.c |   4 +-
 block/commit.c |  95 +---
 block/copy-on-read.c   |  13 +-
 block/file-win32.c |  22 +-
 block/filter-compress.c|   2 -
 block/io.c | 142 ++--
 block/mirror.c | 119