iotests: Set read-zeroes on in null block driver for Valgrind
diff mbox series

Message ID 1563206804-396512-1-git-send-email-andrey.shinkevich@virtuozzo.com
State New
Headers show
Series
  • iotests: Set read-zeroes on in null block driver for Valgrind
Related show

Commit Message

Andrey Shinkevich July 15, 2019, 4:06 p.m. UTC
The Valgrind tool reports about the uninitialised buffer 'buf'
instantiated on the stack of the function guess_disk_lchs().
Pass 'read-zeroes=on' to the null block driver to make it deterministic.
The output of the tests 051, 186 and 227 now includes the parameter
'read-zeroes'. So, the benchmark output files are being changed too.

Suggested-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
---
Note:
The change in the tests 093 and 136 reveals the race condition in chardev.
The patch "chardev: race condition with tcp_chr_disconnect" has been emailed
to qemu-devel@nongnu.org on July, 12 of 2019 with the Message ID
<1562959033-223586-1-git-send-email-andrey.shinkevich@virtuozzo.com>

 tests/qemu-iotests/051        |  10 +--
 tests/qemu-iotests/051.pc.out |  10 +--
 tests/qemu-iotests/093        |   9 +--
 tests/qemu-iotests/136        |   1 +
 tests/qemu-iotests/186        |  20 +++---
 tests/qemu-iotests/186.out    | 152 +++++++++++++++++++++---------------------
 tests/qemu-iotests/227        |   4 +-
 tests/qemu-iotests/227.out    |   4 +-
 tests/qemu-iotests/238        |   2 +-
 tests/qemu-iotests/240        |   8 +--
 10 files changed, 111 insertions(+), 109 deletions(-)

Comments

John Snow July 19, 2019, 12:14 a.m. UTC | #1
On 7/15/19 12:06 PM, Andrey Shinkevich wrote:
> The Valgrind tool reports about the uninitialised buffer 'buf'
> instantiated on the stack of the function guess_disk_lchs().
> Pass 'read-zeroes=on' to the null block driver to make it deterministic.
> The output of the tests 051, 186 and 227 now includes the parameter
> 'read-zeroes'. So, the benchmark output files are being changed too.
> 
> Suggested-by: Kevin Wolf <kwolf@redhat.com>
> Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>

CC qemu-block;

Do you have a list of which tests pass cleanly via valgrind and which do
not? At the moment when I try I get a lot of errors from loaded
libraries, so it's hard to sift through.

--js

> ---
> Note:
> The change in the tests 093 and 136 reveals the race condition in chardev.
> The patch "chardev: race condition with tcp_chr_disconnect" has been emailed
> to qemu-devel@nongnu.org on July, 12 of 2019 with the Message ID
> <1562959033-223586-1-git-send-email-andrey.shinkevich@virtuozzo.com>
> 
>  tests/qemu-iotests/051        |  10 +--
>  tests/qemu-iotests/051.pc.out |  10 +--
>  tests/qemu-iotests/093        |   9 +--
>  tests/qemu-iotests/136        |   1 +
>  tests/qemu-iotests/186        |  20 +++---
>  tests/qemu-iotests/186.out    | 152 +++++++++++++++++++++---------------------
>  tests/qemu-iotests/227        |   4 +-
>  tests/qemu-iotests/227.out    |   4 +-
>  tests/qemu-iotests/238        |   2 +-
>  tests/qemu-iotests/240        |   8 +--
>  10 files changed, 111 insertions(+), 109 deletions(-)
> 
> diff --git a/tests/qemu-iotests/051 b/tests/qemu-iotests/051
> index 200660f..ce942a5 100755
> --- a/tests/qemu-iotests/051
> +++ b/tests/qemu-iotests/051
> @@ -251,11 +251,11 @@ echo
>  # Cannot use the test image because cache=none might not work on the host FS
>  # Use cdrom so that we won't get errors about missing media
>  
> -run_qemu -drive driver=null-co,cache=none
> -run_qemu -drive driver=null-co,cache=directsync
> -run_qemu -drive driver=null-co,cache=writeback
> -run_qemu -drive driver=null-co,cache=writethrough
> -run_qemu -drive driver=null-co,cache=unsafe
> +run_qemu -drive driver=null-co,read-zeroes=on,cache=none
> +run_qemu -drive driver=null-co,read-zeroes=on,cache=directsync
> +run_qemu -drive driver=null-co,read-zeroes=on,cache=writeback
> +run_qemu -drive driver=null-co,read-zeroes=on,cache=writethrough
> +run_qemu -drive driver=null-co,read-zeroes=on,cache=unsafe
>  run_qemu -drive driver=null-co,cache=invalid_value
>  
>  # Can't test direct=on here because O_DIRECT might not be supported on this FS
> diff --git a/tests/qemu-iotests/051.pc.out b/tests/qemu-iotests/051.pc.out
> index 2d811c1..000557c 100644
> --- a/tests/qemu-iotests/051.pc.out
> +++ b/tests/qemu-iotests/051.pc.out
> @@ -245,23 +245,23 @@ QEMU X.Y.Z monitor - type 'help' for more information
>  
>  === Cache modes ===
>  
> -Testing: -drive driver=null-co,cache=none
> +Testing: -drive driver=null-co,read-zeroes=on,cache=none
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) quit
>  
> -Testing: -drive driver=null-co,cache=directsync
> +Testing: -drive driver=null-co,read-zeroes=on,cache=directsync
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) quit
>  
> -Testing: -drive driver=null-co,cache=writeback
> +Testing: -drive driver=null-co,read-zeroes=on,cache=writeback
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) quit
>  
> -Testing: -drive driver=null-co,cache=writethrough
> +Testing: -drive driver=null-co,read-zeroes=on,cache=writethrough
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) quit
>  
> -Testing: -drive driver=null-co,cache=unsafe
> +Testing: -drive driver=null-co,read-zeroes=on,cache=unsafe
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) quit
>  
> diff --git a/tests/qemu-iotests/093 b/tests/qemu-iotests/093
> index d88fbc1..4b2cac1 100755
> --- a/tests/qemu-iotests/093
> +++ b/tests/qemu-iotests/093
> @@ -38,7 +38,7 @@ class ThrottleTestCase(iotests.QMPTestCase):
>      def setUp(self):
>          self.vm = iotests.VM()
>          for i in range(0, self.max_drives):
> -            self.vm.add_drive(self.test_img)
> +            self.vm.add_drive(self.test_img, "file.read-zeroes=on")
>          self.vm.launch()
>  
>      def tearDown(self):
> @@ -273,7 +273,8 @@ class ThrottleTestGroupNames(iotests.QMPTestCase):
>      def setUp(self):
>          self.vm = iotests.VM()
>          for i in range(0, self.max_drives):
> -            self.vm.add_drive(self.test_img, "throttling.iops-total=100")
> +            self.vm.add_drive(self.test_img,
> +                              "throttling.iops-total=100,file.read-zeroes=on")
>          self.vm.launch()
>  
>      def tearDown(self):
> @@ -378,10 +379,10 @@ class ThrottleTestRemovableMedia(iotests.QMPTestCase):
>      def test_removable_media(self):
>          # Add a couple of dummy nodes named cd0 and cd1
>          result = self.vm.qmp("blockdev-add", driver="null-aio",
> -                             node_name="cd0")
> +                             read_zeroes=True, node_name="cd0")
>          self.assert_qmp(result, 'return', {})
>          result = self.vm.qmp("blockdev-add", driver="null-aio",
> -                             node_name="cd1")
> +                             read_zeroes=True, node_name="cd1")
>          self.assert_qmp(result, 'return', {})
>  
>          # Attach a CD drive with cd0 inserted
> diff --git a/tests/qemu-iotests/136 b/tests/qemu-iotests/136
> index af7ffa4..a46a7b7 100755
> --- a/tests/qemu-iotests/136
> +++ b/tests/qemu-iotests/136
> @@ -74,6 +74,7 @@ sector = "%d"
>                            (self.account_invalid and "on" or "off"))
>          drive_args.append("stats-account-failed=%s" %
>                            (self.account_failed and "on" or "off"))
> +        drive_args.append("file.image.read-zeroes=on")
>          self.create_blkdebug_file()
>          self.vm = iotests.VM().add_drive('blkdebug:%s:%s' %
>                                           (blkdebug_file, self.test_img),
> diff --git a/tests/qemu-iotests/186 b/tests/qemu-iotests/186
> index 7e7d45b..5f6b18c 100755
> --- a/tests/qemu-iotests/186
> +++ b/tests/qemu-iotests/186
> @@ -86,8 +86,8 @@ echo "=== -blockdev/-device=<node-name> ==="
>  echo
>  
>  for dev in $fixed $removable; do
> -    check_info_block -blockdev driver=null-co,node-name=null -device $dev,drive=null
> -    check_info_block -blockdev driver=null-co,node-name=null -device $dev,drive=null,id=qdev_id
> +    check_info_block -blockdev driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=null
> +    check_info_block -blockdev driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=null,id=qdev_id
>  done
>  
>  echo
> @@ -97,7 +97,7 @@ echo
>  # This creates two BlockBackends that will show up in 'info block'!
>  # A monitor-owned one from -drive, and anonymous one from -device
>  for dev in $fixed $removable; do
> -    check_info_block -drive if=none,driver=null-co,node-name=null -device $dev,drive=null,id=qdev_id
> +    check_info_block -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=null,id=qdev_id
>  done
>  
>  echo
> @@ -105,8 +105,8 @@ echo "=== -drive if=none/-device=<bb-name> (with medium) ==="
>  echo
>  
>  for dev in $fixed $removable; do
> -    check_info_block -drive if=none,driver=null-co,node-name=null -device $dev,drive=none0
> -    check_info_block -drive if=none,driver=null-co,node-name=null -device $dev,drive=none0,id=qdev_id
> +    check_info_block -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=none0
> +    check_info_block -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=none0,id=qdev_id
>  done
>  
>  echo
> @@ -125,15 +125,15 @@ echo "=== -drive if=... ==="
>  echo
>  
>  check_info_block -drive if=floppy
> -check_info_block -drive if=floppy,driver=null-co
> +check_info_block -drive if=floppy,driver=null-co,read-zeroes=on
>  
> -check_info_block -drive if=ide,driver=null-co
> +check_info_block -drive if=ide,driver=null-co,read-zeroes=on
>  check_info_block -drive if=ide,media=cdrom
> -check_info_block -drive if=ide,driver=null-co,media=cdrom
> +check_info_block -drive if=ide,driver=null-co,read-zeroes=on,media=cdrom
>  
> -check_info_block -drive if=virtio,driver=null-co
> +check_info_block -drive if=virtio,driver=null-co,read-zeroes=on
>  
> -check_info_block -drive if=pflash,driver=null-co,size=1M
> +check_info_block -drive if=pflash,driver=null-co,read-zeroes=on,size=1M
>  
>  # success, all done
>  echo "*** done"
> diff --git a/tests/qemu-iotests/186.out b/tests/qemu-iotests/186.out
> index 716b01a..5b35040 100644
> --- a/tests/qemu-iotests/186.out
> +++ b/tests/qemu-iotests/186.out
> @@ -54,103 +54,103 @@ qdev_id: [not inserted]
>  
>  === -blockdev/-device=<node-name> ===
>  
> -Testing: -blockdev driver=null-co,node-name=null -device ide-hd,drive=null
> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=null
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -null: null-co:// (null-co)
> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>      Attached to:      PATH
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -blockdev driver=null-co,node-name=null -device ide-hd,drive=null,id=qdev_id
> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=null,id=qdev_id
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -null: null-co:// (null-co)
> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>      Attached to:      qdev_id
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -blockdev driver=null-co,node-name=null -device scsi-hd,drive=null
> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=null
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -null: null-co:// (null-co)
> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>      Attached to:      PATH
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -blockdev driver=null-co,node-name=null -device scsi-hd,drive=null,id=qdev_id
> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=null,id=qdev_id
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -null: null-co:// (null-co)
> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>      Attached to:      qdev_id
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -blockdev driver=null-co,node-name=null -device virtio-blk-pci,drive=null
> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=null
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -null: null-co:// (null-co)
> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>      Attached to:      PATH
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -blockdev driver=null-co,node-name=null -device virtio-blk-pci,drive=null,id=qdev_id
> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=null,id=qdev_id
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -null: null-co:// (null-co)
> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>      Attached to:      PATH
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -blockdev driver=null-co,node-name=null -device floppy,drive=null
> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=null
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -null: null-co:// (null-co)
> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>      Attached to:      PATH
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -blockdev driver=null-co,node-name=null -device floppy,drive=null,id=qdev_id
> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=null,id=qdev_id
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -null: null-co:// (null-co)
> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>      Attached to:      qdev_id
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -blockdev driver=null-co,node-name=null -device ide-cd,drive=null
> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=null
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -null: null-co:// (null-co)
> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>      Attached to:      PATH
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -blockdev driver=null-co,node-name=null -device ide-cd,drive=null,id=qdev_id
> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=null,id=qdev_id
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -null: null-co:// (null-co)
> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>      Attached to:      qdev_id
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -blockdev driver=null-co,node-name=null -device scsi-cd,drive=null
> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=null
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -null: null-co:// (null-co)
> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>      Attached to:      PATH
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -blockdev driver=null-co,node-name=null -device scsi-cd,drive=null,id=qdev_id
> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=null,id=qdev_id
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -null: null-co:// (null-co)
> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>      Attached to:      qdev_id
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
> @@ -159,76 +159,76 @@ null: null-co:// (null-co)
>  
>  === -drive if=none/-device=<node-name> ===
>  
> -Testing: -drive if=none,driver=null-co,node-name=null -device ide-hd,drive=null,id=qdev_id
> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=null,id=qdev_id
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -none0 (null): null-co:// (null-co)
> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  
> -null: null-co:// (null-co)
> +null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      qdev_id
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -drive if=none,driver=null-co,node-name=null -device scsi-hd,drive=null,id=qdev_id
> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=null,id=qdev_id
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -none0 (null): null-co:// (null-co)
> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  
> -null: null-co:// (null-co)
> +null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      qdev_id
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -drive if=none,driver=null-co,node-name=null -device virtio-blk-pci,drive=null,id=qdev_id
> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=null,id=qdev_id
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -none0 (null): null-co:// (null-co)
> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  
> -null: null-co:// (null-co)
> +null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      PATH
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -drive if=none,driver=null-co,node-name=null -device floppy,drive=null,id=qdev_id
> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=null,id=qdev_id
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -none0 (null): null-co:// (null-co)
> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  
> -null: null-co:// (null-co)
> +null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      qdev_id
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -drive if=none,driver=null-co,node-name=null -device ide-cd,drive=null,id=qdev_id
> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=null,id=qdev_id
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -none0 (null): null-co:// (null-co)
> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  
> -null: null-co:// (null-co)
> +null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      qdev_id
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -drive if=none,driver=null-co,node-name=null -device scsi-cd,drive=null,id=qdev_id
> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=null,id=qdev_id
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -none0 (null): null-co:// (null-co)
> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  
> -null: null-co:// (null-co)
> +null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      qdev_id
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
> @@ -237,103 +237,103 @@ null: null-co:// (null-co)
>  
>  === -drive if=none/-device=<bb-name> (with medium) ===
>  
> -Testing: -drive if=none,driver=null-co,node-name=null -device ide-hd,drive=none0
> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=none0
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -none0 (null): null-co:// (null-co)
> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      PATH
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -drive if=none,driver=null-co,node-name=null -device ide-hd,drive=none0,id=qdev_id
> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=none0,id=qdev_id
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -none0 (null): null-co:// (null-co)
> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      qdev_id
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -drive if=none,driver=null-co,node-name=null -device scsi-hd,drive=none0
> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=none0
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -none0 (null): null-co:// (null-co)
> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      PATH
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -drive if=none,driver=null-co,node-name=null -device scsi-hd,drive=none0,id=qdev_id
> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=none0,id=qdev_id
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -none0 (null): null-co:// (null-co)
> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      qdev_id
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -drive if=none,driver=null-co,node-name=null -device virtio-blk-pci,drive=none0
> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=none0
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -none0 (null): null-co:// (null-co)
> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      PATH
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -drive if=none,driver=null-co,node-name=null -device virtio-blk-pci,drive=none0,id=qdev_id
> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=none0,id=qdev_id
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -none0 (null): null-co:// (null-co)
> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      PATH
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -drive if=none,driver=null-co,node-name=null -device floppy,drive=none0
> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=none0
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -none0 (null): null-co:// (null-co)
> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      PATH
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -drive if=none,driver=null-co,node-name=null -device floppy,drive=none0,id=qdev_id
> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=none0,id=qdev_id
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -none0 (null): null-co:// (null-co)
> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      qdev_id
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -drive if=none,driver=null-co,node-name=null -device ide-cd,drive=none0
> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=none0
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -none0 (null): null-co:// (null-co)
> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      PATH
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -drive if=none,driver=null-co,node-name=null -device ide-cd,drive=none0,id=qdev_id
> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=none0,id=qdev_id
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -none0 (null): null-co:// (null-co)
> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      qdev_id
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -drive if=none,driver=null-co,node-name=null -device scsi-cd,drive=none0
> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=none0
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -none0 (null): null-co:// (null-co)
> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      PATH
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -drive if=none,driver=null-co,node-name=null -device scsi-cd,drive=none0,id=qdev_id
> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=none0,id=qdev_id
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -none0 (null): null-co:// (null-co)
> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      qdev_id
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
> @@ -408,19 +408,19 @@ floppy0: [not inserted]
>      Removable device: not locked, tray closed
>  (qemu) quit
>  
> -Testing: -drive if=floppy,driver=null-co
> +Testing: -drive if=floppy,driver=null-co,read-zeroes=on
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -floppy0 (NODE_NAME): null-co:// (null-co)
> +floppy0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      PATH
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -drive if=ide,driver=null-co
> +Testing: -drive if=ide,driver=null-co,read-zeroes=on
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -ide0-hd0 (NODE_NAME): null-co:// (null-co)
> +ide0-hd0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      PATH
>      Cache mode:       writeback
>  (qemu) quit
> @@ -433,27 +433,27 @@ ide0-cd0: [not inserted]
>      Removable device: not locked, tray closed
>  (qemu) quit
>  
> -Testing: -drive if=ide,driver=null-co,media=cdrom
> +Testing: -drive if=ide,driver=null-co,read-zeroes=on,media=cdrom
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -ide0-cd0 (NODE_NAME): null-co:// (null-co, read-only)
> +ide0-cd0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} (null-co, read-only)
>      Attached to:      PATH
>      Removable device: not locked, tray closed
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -drive if=virtio,driver=null-co
> +Testing: -drive if=virtio,driver=null-co,read-zeroes=on
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -virtio0 (NODE_NAME): null-co:// (null-co)
> +virtio0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>      Attached to:      PATH
>      Cache mode:       writeback
>  (qemu) quit
>  
> -Testing: -drive if=pflash,driver=null-co,size=1M
> +Testing: -drive if=pflash,driver=null-co,read-zeroes=on,size=1M
>  QEMU X.Y.Z monitor - type 'help' for more information
>  (qemu) info block
> -pflash0 (NODE_NAME): json:{"driver": "null-co", "size": "1M"} (null-co)
> +pflash0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co", "size": "1M"} (null-co)
>      Attached to:      PATH
>      Cache mode:       writeback
>  (qemu) quit
> diff --git a/tests/qemu-iotests/227 b/tests/qemu-iotests/227
> index bdd727a..637d7c3 100755
> --- a/tests/qemu-iotests/227
> +++ b/tests/qemu-iotests/227
> @@ -57,7 +57,7 @@ echo
>  echo '=== blockstats with -drive if=virtio ==='
>  echo
>  
> -run_qemu -drive driver=null-co,if=virtio <<EOF
> +run_qemu -drive driver=null-co,read-zeroes=on,if=virtio <<EOF
>  { "execute": "qmp_capabilities" }
>  { "execute": "query-blockstats"}
>  { "execute": "quit" }
> @@ -87,7 +87,7 @@ echo
>  echo '=== blockstats with -blockdev and -device ==='
>  echo
>  
> -run_qemu -blockdev driver=null-co,node-name=null -device virtio-blk,drive=null,id=virtio0 <<EOF
> +run_qemu -blockdev driver=null-co,read-zeroes=on,node-name=null -device virtio-blk,drive=null,id=virtio0 <<EOF
>  { "execute": "qmp_capabilities" }
>  { "execute": "query-blockstats"}
>  { "execute": "quit" }
> diff --git a/tests/qemu-iotests/227.out b/tests/qemu-iotests/227.out
> index e77efaf..3dd3ca5 100644
> --- a/tests/qemu-iotests/227.out
> +++ b/tests/qemu-iotests/227.out
> @@ -2,7 +2,7 @@ QA output created by 227
>  
>  === blockstats with -drive if=virtio ===
>  
> -Testing: -drive driver=null-co,if=virtio
> +Testing: -drive driver=null-co,read-zeroes=on,if=virtio
>  {
>      QMP_VERSION
>  }
> @@ -150,7 +150,7 @@ Testing: -blockdev driver=null-co,node-name=null
>  
>  === blockstats with -blockdev and -device ===
>  
> -Testing: -blockdev driver=null-co,node-name=null -device virtio-blk,drive=null,id=virtio0
> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device virtio-blk,drive=null,id=virtio0
>  {
>      QMP_VERSION
>  }
> diff --git a/tests/qemu-iotests/238 b/tests/qemu-iotests/238
> index 1c0a46f..08bc7e6 100755
> --- a/tests/qemu-iotests/238
> +++ b/tests/qemu-iotests/238
> @@ -31,7 +31,7 @@ else:
>  vm = iotests.VM()
>  vm.launch()
>  
> -log(vm.qmp('blockdev-add', node_name='hd0', driver='null-co'))
> +log(vm.qmp('blockdev-add', node_name='hd0', driver='null-co', read_zeroes=True))
>  log(vm.qmp('object-add', qom_type='iothread', id='iothread0'))
>  log(vm.qmp('device_add', id='scsi0', driver=virtio_scsi_device, iothread='iothread0'))
>  log(vm.qmp('device_add', id='scsi-hd0', driver='scsi-hd', drive='hd0'))
> diff --git a/tests/qemu-iotests/240 b/tests/qemu-iotests/240
> index 5be6b9c..f73bc07 100755
> --- a/tests/qemu-iotests/240
> +++ b/tests/qemu-iotests/240
> @@ -76,7 +76,7 @@ echo
>  
>  run_qemu <<EOF
>  { "execute": "qmp_capabilities" }
> -{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "hd0"}}
> +{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0"}}
>  { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
>  { "execute": "device_add", "arguments": {"id": "scsi0", "driver": "${virtio_scsi}", "iothread": "iothread0"}}
>  { "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver": "scsi-hd", "drive": "hd0"}}
> @@ -94,7 +94,7 @@ echo
>  
>  run_qemu <<EOF
>  { "execute": "qmp_capabilities" }
> -{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "hd0", "read-only": true}}
> +{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0", "read-only": true}}
>  { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
>  { "execute": "device_add", "arguments": {"id": "scsi0", "driver": "${virtio_scsi}", "iothread": "iothread0"}}
>  { "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver": "scsi-hd", "drive": "hd0"}}
> @@ -112,7 +112,7 @@ echo
>  
>  run_qemu <<EOF
>  { "execute": "qmp_capabilities" }
> -{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "hd0", "read-only": true}}
> +{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0", "read-only": true}}
>  { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
>  { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread1"}}
>  { "execute": "device_add", "arguments": {"id": "scsi0", "driver": "${virtio_scsi}", "iothread": "iothread0"}}
> @@ -134,7 +134,7 @@ echo
>  
>  run_qemu <<EOF
>  { "execute": "qmp_capabilities" }
> -{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "hd0", "read-only": true}}
> +{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0", "read-only": true}}
>  { "execute": "nbd-server-start", "arguments": {"addr":{"type":"unix","data":{"path":"$TEST_DIR/nbd"}}}}
>  { "execute": "nbd-server-add", "arguments": {"device":"hd0"}}
>  { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
>
Andrey Shinkevich July 19, 2019, 9:23 a.m. UTC | #2
On 19/07/2019 03:14, John Snow wrote:
> 
> 
> On 7/15/19 12:06 PM, Andrey Shinkevich wrote:
>> The Valgrind tool reports about the uninitialised buffer 'buf'
>> instantiated on the stack of the function guess_disk_lchs().
>> Pass 'read-zeroes=on' to the null block driver to make it deterministic.
>> The output of the tests 051, 186 and 227 now includes the parameter
>> 'read-zeroes'. So, the benchmark output files are being changed too.
>>
>> Suggested-by: Kevin Wolf <kwolf@redhat.com>
>> Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
> 
> CC qemu-block;
> 
> Do you have a list of which tests pass cleanly via valgrind and which do
> not? At the moment when I try I get a lot of errors from loaded
> libraries, so it's hard to sift through.
> 
> --js
> 

It can be a segmentation fault in the tests 093 and 136 after applying 
this series because of the known issue:
Message ID: <cover.1550842915.git.berto@igalia.com>
or
https://lists.nongnu.org/archive/html/qemu-devel/2019-02/msg06174.html
I have not got other issues when running iotests with the default 
Valgrind parameters.
Would you please send me the command you run the iotests under the 
Valgrind with?

Andrey

>> ---
>> Note:
>> The change in the tests 093 and 136 reveals the race condition in chardev.
>> The patch "chardev: race condition with tcp_chr_disconnect" has been emailed
>> to qemu-devel@nongnu.org on July, 12 of 2019 with the Message ID
>> <1562959033-223586-1-git-send-email-andrey.shinkevich@virtuozzo.com>
>>
>>   tests/qemu-iotests/051        |  10 +--
>>   tests/qemu-iotests/051.pc.out |  10 +--
>>   tests/qemu-iotests/093        |   9 +--
>>   tests/qemu-iotests/136        |   1 +
>>   tests/qemu-iotests/186        |  20 +++---
>>   tests/qemu-iotests/186.out    | 152 +++++++++++++++++++++---------------------
>>   tests/qemu-iotests/227        |   4 +-
>>   tests/qemu-iotests/227.out    |   4 +-
>>   tests/qemu-iotests/238        |   2 +-
>>   tests/qemu-iotests/240        |   8 +--
>>   10 files changed, 111 insertions(+), 109 deletions(-)
>>
>> diff --git a/tests/qemu-iotests/051 b/tests/qemu-iotests/051
>> index 200660f..ce942a5 100755
>> --- a/tests/qemu-iotests/051
>> +++ b/tests/qemu-iotests/051
>> @@ -251,11 +251,11 @@ echo
>>   # Cannot use the test image because cache=none might not work on the host FS
>>   # Use cdrom so that we won't get errors about missing media
>>   
>> -run_qemu -drive driver=null-co,cache=none
>> -run_qemu -drive driver=null-co,cache=directsync
>> -run_qemu -drive driver=null-co,cache=writeback
>> -run_qemu -drive driver=null-co,cache=writethrough
>> -run_qemu -drive driver=null-co,cache=unsafe
>> +run_qemu -drive driver=null-co,read-zeroes=on,cache=none
>> +run_qemu -drive driver=null-co,read-zeroes=on,cache=directsync
>> +run_qemu -drive driver=null-co,read-zeroes=on,cache=writeback
>> +run_qemu -drive driver=null-co,read-zeroes=on,cache=writethrough
>> +run_qemu -drive driver=null-co,read-zeroes=on,cache=unsafe
>>   run_qemu -drive driver=null-co,cache=invalid_value
>>   
>>   # Can't test direct=on here because O_DIRECT might not be supported on this FS
>> diff --git a/tests/qemu-iotests/051.pc.out b/tests/qemu-iotests/051.pc.out
>> index 2d811c1..000557c 100644
>> --- a/tests/qemu-iotests/051.pc.out
>> +++ b/tests/qemu-iotests/051.pc.out
>> @@ -245,23 +245,23 @@ QEMU X.Y.Z monitor - type 'help' for more information
>>   
>>   === Cache modes ===
>>   
>> -Testing: -drive driver=null-co,cache=none
>> +Testing: -drive driver=null-co,read-zeroes=on,cache=none
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) quit
>>   
>> -Testing: -drive driver=null-co,cache=directsync
>> +Testing: -drive driver=null-co,read-zeroes=on,cache=directsync
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) quit
>>   
>> -Testing: -drive driver=null-co,cache=writeback
>> +Testing: -drive driver=null-co,read-zeroes=on,cache=writeback
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) quit
>>   
>> -Testing: -drive driver=null-co,cache=writethrough
>> +Testing: -drive driver=null-co,read-zeroes=on,cache=writethrough
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) quit
>>   
>> -Testing: -drive driver=null-co,cache=unsafe
>> +Testing: -drive driver=null-co,read-zeroes=on,cache=unsafe
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) quit
>>   
>> diff --git a/tests/qemu-iotests/093 b/tests/qemu-iotests/093
>> index d88fbc1..4b2cac1 100755
>> --- a/tests/qemu-iotests/093
>> +++ b/tests/qemu-iotests/093
>> @@ -38,7 +38,7 @@ class ThrottleTestCase(iotests.QMPTestCase):
>>       def setUp(self):
>>           self.vm = iotests.VM()
>>           for i in range(0, self.max_drives):
>> -            self.vm.add_drive(self.test_img)
>> +            self.vm.add_drive(self.test_img, "file.read-zeroes=on")
>>           self.vm.launch()
>>   
>>       def tearDown(self):
>> @@ -273,7 +273,8 @@ class ThrottleTestGroupNames(iotests.QMPTestCase):
>>       def setUp(self):
>>           self.vm = iotests.VM()
>>           for i in range(0, self.max_drives):
>> -            self.vm.add_drive(self.test_img, "throttling.iops-total=100")
>> +            self.vm.add_drive(self.test_img,
>> +                              "throttling.iops-total=100,file.read-zeroes=on")
>>           self.vm.launch()
>>   
>>       def tearDown(self):
>> @@ -378,10 +379,10 @@ class ThrottleTestRemovableMedia(iotests.QMPTestCase):
>>       def test_removable_media(self):
>>           # Add a couple of dummy nodes named cd0 and cd1
>>           result = self.vm.qmp("blockdev-add", driver="null-aio",
>> -                             node_name="cd0")
>> +                             read_zeroes=True, node_name="cd0")
>>           self.assert_qmp(result, 'return', {})
>>           result = self.vm.qmp("blockdev-add", driver="null-aio",
>> -                             node_name="cd1")
>> +                             read_zeroes=True, node_name="cd1")
>>           self.assert_qmp(result, 'return', {})
>>   
>>           # Attach a CD drive with cd0 inserted
>> diff --git a/tests/qemu-iotests/136 b/tests/qemu-iotests/136
>> index af7ffa4..a46a7b7 100755
>> --- a/tests/qemu-iotests/136
>> +++ b/tests/qemu-iotests/136
>> @@ -74,6 +74,7 @@ sector = "%d"
>>                             (self.account_invalid and "on" or "off"))
>>           drive_args.append("stats-account-failed=%s" %
>>                             (self.account_failed and "on" or "off"))
>> +        drive_args.append("file.image.read-zeroes=on")
>>           self.create_blkdebug_file()
>>           self.vm = iotests.VM().add_drive('blkdebug:%s:%s' %
>>                                            (blkdebug_file, self.test_img),
>> diff --git a/tests/qemu-iotests/186 b/tests/qemu-iotests/186
>> index 7e7d45b..5f6b18c 100755
>> --- a/tests/qemu-iotests/186
>> +++ b/tests/qemu-iotests/186
>> @@ -86,8 +86,8 @@ echo "=== -blockdev/-device=<node-name> ==="
>>   echo
>>   
>>   for dev in $fixed $removable; do
>> -    check_info_block -blockdev driver=null-co,node-name=null -device $dev,drive=null
>> -    check_info_block -blockdev driver=null-co,node-name=null -device $dev,drive=null,id=qdev_id
>> +    check_info_block -blockdev driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=null
>> +    check_info_block -blockdev driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=null,id=qdev_id
>>   done
>>   
>>   echo
>> @@ -97,7 +97,7 @@ echo
>>   # This creates two BlockBackends that will show up in 'info block'!
>>   # A monitor-owned one from -drive, and anonymous one from -device
>>   for dev in $fixed $removable; do
>> -    check_info_block -drive if=none,driver=null-co,node-name=null -device $dev,drive=null,id=qdev_id
>> +    check_info_block -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=null,id=qdev_id
>>   done
>>   
>>   echo
>> @@ -105,8 +105,8 @@ echo "=== -drive if=none/-device=<bb-name> (with medium) ==="
>>   echo
>>   
>>   for dev in $fixed $removable; do
>> -    check_info_block -drive if=none,driver=null-co,node-name=null -device $dev,drive=none0
>> -    check_info_block -drive if=none,driver=null-co,node-name=null -device $dev,drive=none0,id=qdev_id
>> +    check_info_block -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=none0
>> +    check_info_block -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=none0,id=qdev_id
>>   done
>>   
>>   echo
>> @@ -125,15 +125,15 @@ echo "=== -drive if=... ==="
>>   echo
>>   
>>   check_info_block -drive if=floppy
>> -check_info_block -drive if=floppy,driver=null-co
>> +check_info_block -drive if=floppy,driver=null-co,read-zeroes=on
>>   
>> -check_info_block -drive if=ide,driver=null-co
>> +check_info_block -drive if=ide,driver=null-co,read-zeroes=on
>>   check_info_block -drive if=ide,media=cdrom
>> -check_info_block -drive if=ide,driver=null-co,media=cdrom
>> +check_info_block -drive if=ide,driver=null-co,read-zeroes=on,media=cdrom
>>   
>> -check_info_block -drive if=virtio,driver=null-co
>> +check_info_block -drive if=virtio,driver=null-co,read-zeroes=on
>>   
>> -check_info_block -drive if=pflash,driver=null-co,size=1M
>> +check_info_block -drive if=pflash,driver=null-co,read-zeroes=on,size=1M
>>   
>>   # success, all done
>>   echo "*** done"
>> diff --git a/tests/qemu-iotests/186.out b/tests/qemu-iotests/186.out
>> index 716b01a..5b35040 100644
>> --- a/tests/qemu-iotests/186.out
>> +++ b/tests/qemu-iotests/186.out
>> @@ -54,103 +54,103 @@ qdev_id: [not inserted]
>>   
>>   === -blockdev/-device=<node-name> ===
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device ide-hd,drive=null
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=null
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device ide-hd,drive=null,id=qdev_id
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device scsi-hd,drive=null
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=null
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device scsi-hd,drive=null,id=qdev_id
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device virtio-blk-pci,drive=null
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=null
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device virtio-blk-pci,drive=null,id=qdev_id
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device floppy,drive=null
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=null
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device floppy,drive=null,id=qdev_id
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device ide-cd,drive=null
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=null
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device ide-cd,drive=null,id=qdev_id
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device scsi-cd,drive=null
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=null
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device scsi-cd,drive=null,id=qdev_id
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>> @@ -159,76 +159,76 @@ null: null-co:// (null-co)
>>   
>>   === -drive if=none/-device=<node-name> ===
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device ide-hd,drive=null,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device scsi-hd,drive=null,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device virtio-blk-pci,drive=null,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device floppy,drive=null,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device ide-cd,drive=null,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device scsi-cd,drive=null,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>> @@ -237,103 +237,103 @@ null: null-co:// (null-co)
>>   
>>   === -drive if=none/-device=<bb-name> (with medium) ===
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device ide-hd,drive=none0
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=none0
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device ide-hd,drive=none0,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=none0,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device scsi-hd,drive=none0
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=none0
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device scsi-hd,drive=none0,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=none0,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device virtio-blk-pci,drive=none0
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=none0
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device virtio-blk-pci,drive=none0,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=none0,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device floppy,drive=none0
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=none0
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device floppy,drive=none0,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=none0,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device ide-cd,drive=none0
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=none0
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device ide-cd,drive=none0,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=none0,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device scsi-cd,drive=none0
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=none0
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device scsi-cd,drive=none0,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=none0,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>> @@ -408,19 +408,19 @@ floppy0: [not inserted]
>>       Removable device: not locked, tray closed
>>   (qemu) quit
>>   
>> -Testing: -drive if=floppy,driver=null-co
>> +Testing: -drive if=floppy,driver=null-co,read-zeroes=on
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -floppy0 (NODE_NAME): null-co:// (null-co)
>> +floppy0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=ide,driver=null-co
>> +Testing: -drive if=ide,driver=null-co,read-zeroes=on
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -ide0-hd0 (NODE_NAME): null-co:// (null-co)
>> +ide0-hd0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>> @@ -433,27 +433,27 @@ ide0-cd0: [not inserted]
>>       Removable device: not locked, tray closed
>>   (qemu) quit
>>   
>> -Testing: -drive if=ide,driver=null-co,media=cdrom
>> +Testing: -drive if=ide,driver=null-co,read-zeroes=on,media=cdrom
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -ide0-cd0 (NODE_NAME): null-co:// (null-co, read-only)
>> +ide0-cd0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} (null-co, read-only)
>>       Attached to:      PATH
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=virtio,driver=null-co
>> +Testing: -drive if=virtio,driver=null-co,read-zeroes=on
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -virtio0 (NODE_NAME): null-co:// (null-co)
>> +virtio0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=pflash,driver=null-co,size=1M
>> +Testing: -drive if=pflash,driver=null-co,read-zeroes=on,size=1M
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -pflash0 (NODE_NAME): json:{"driver": "null-co", "size": "1M"} (null-co)
>> +pflash0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co", "size": "1M"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>> diff --git a/tests/qemu-iotests/227 b/tests/qemu-iotests/227
>> index bdd727a..637d7c3 100755
>> --- a/tests/qemu-iotests/227
>> +++ b/tests/qemu-iotests/227
>> @@ -57,7 +57,7 @@ echo
>>   echo '=== blockstats with -drive if=virtio ==='
>>   echo
>>   
>> -run_qemu -drive driver=null-co,if=virtio <<EOF
>> +run_qemu -drive driver=null-co,read-zeroes=on,if=virtio <<EOF
>>   { "execute": "qmp_capabilities" }
>>   { "execute": "query-blockstats"}
>>   { "execute": "quit" }
>> @@ -87,7 +87,7 @@ echo
>>   echo '=== blockstats with -blockdev and -device ==='
>>   echo
>>   
>> -run_qemu -blockdev driver=null-co,node-name=null -device virtio-blk,drive=null,id=virtio0 <<EOF
>> +run_qemu -blockdev driver=null-co,read-zeroes=on,node-name=null -device virtio-blk,drive=null,id=virtio0 <<EOF
>>   { "execute": "qmp_capabilities" }
>>   { "execute": "query-blockstats"}
>>   { "execute": "quit" }
>> diff --git a/tests/qemu-iotests/227.out b/tests/qemu-iotests/227.out
>> index e77efaf..3dd3ca5 100644
>> --- a/tests/qemu-iotests/227.out
>> +++ b/tests/qemu-iotests/227.out
>> @@ -2,7 +2,7 @@ QA output created by 227
>>   
>>   === blockstats with -drive if=virtio ===
>>   
>> -Testing: -drive driver=null-co,if=virtio
>> +Testing: -drive driver=null-co,read-zeroes=on,if=virtio
>>   {
>>       QMP_VERSION
>>   }
>> @@ -150,7 +150,7 @@ Testing: -blockdev driver=null-co,node-name=null
>>   
>>   === blockstats with -blockdev and -device ===
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device virtio-blk,drive=null,id=virtio0
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device virtio-blk,drive=null,id=virtio0
>>   {
>>       QMP_VERSION
>>   }
>> diff --git a/tests/qemu-iotests/238 b/tests/qemu-iotests/238
>> index 1c0a46f..08bc7e6 100755
>> --- a/tests/qemu-iotests/238
>> +++ b/tests/qemu-iotests/238
>> @@ -31,7 +31,7 @@ else:
>>   vm = iotests.VM()
>>   vm.launch()
>>   
>> -log(vm.qmp('blockdev-add', node_name='hd0', driver='null-co'))
>> +log(vm.qmp('blockdev-add', node_name='hd0', driver='null-co', read_zeroes=True))
>>   log(vm.qmp('object-add', qom_type='iothread', id='iothread0'))
>>   log(vm.qmp('device_add', id='scsi0', driver=virtio_scsi_device, iothread='iothread0'))
>>   log(vm.qmp('device_add', id='scsi-hd0', driver='scsi-hd', drive='hd0'))
>> diff --git a/tests/qemu-iotests/240 b/tests/qemu-iotests/240
>> index 5be6b9c..f73bc07 100755
>> --- a/tests/qemu-iotests/240
>> +++ b/tests/qemu-iotests/240
>> @@ -76,7 +76,7 @@ echo
>>   
>>   run_qemu <<EOF
>>   { "execute": "qmp_capabilities" }
>> -{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "hd0"}}
>> +{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0"}}
>>   { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
>>   { "execute": "device_add", "arguments": {"id": "scsi0", "driver": "${virtio_scsi}", "iothread": "iothread0"}}
>>   { "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver": "scsi-hd", "drive": "hd0"}}
>> @@ -94,7 +94,7 @@ echo
>>   
>>   run_qemu <<EOF
>>   { "execute": "qmp_capabilities" }
>> -{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "hd0", "read-only": true}}
>> +{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0", "read-only": true}}
>>   { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
>>   { "execute": "device_add", "arguments": {"id": "scsi0", "driver": "${virtio_scsi}", "iothread": "iothread0"}}
>>   { "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver": "scsi-hd", "drive": "hd0"}}
>> @@ -112,7 +112,7 @@ echo
>>   
>>   run_qemu <<EOF
>>   { "execute": "qmp_capabilities" }
>> -{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "hd0", "read-only": true}}
>> +{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0", "read-only": true}}
>>   { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
>>   { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread1"}}
>>   { "execute": "device_add", "arguments": {"id": "scsi0", "driver": "${virtio_scsi}", "iothread": "iothread0"}}
>> @@ -134,7 +134,7 @@ echo
>>   
>>   run_qemu <<EOF
>>   { "execute": "qmp_capabilities" }
>> -{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "hd0", "read-only": true}}
>> +{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0", "read-only": true}}
>>   { "execute": "nbd-server-start", "arguments": {"addr":{"type":"unix","data":{"path":"$TEST_DIR/nbd"}}}}
>>   { "execute": "nbd-server-add", "arguments": {"device":"hd0"}}
>>   { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
>>
Andrey Shinkevich July 19, 2019, 2:15 p.m. UTC | #3
On 19/07/2019 03:14, John Snow wrote:
> 
> 
> On 7/15/19 12:06 PM, Andrey Shinkevich wrote:
>> The Valgrind tool reports about the uninitialised buffer 'buf'
>> instantiated on the stack of the function guess_disk_lchs().
>> Pass 'read-zeroes=on' to the null block driver to make it deterministic.
>> The output of the tests 051, 186 and 227 now includes the parameter
>> 'read-zeroes'. So, the benchmark output files are being changed too.
>>
>> Suggested-by: Kevin Wolf <kwolf@redhat.com>
>> Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
> 
> CC qemu-block;
> 
> Do you have a list of which tests pass cleanly via valgrind and which do
> not? At the moment when I try I get a lot of errors from loaded
> libraries, so it's hard to sift through.
> 
> --js
> 

The iotests 045, 118, 147 (as well as the mentioned 093 and 136) can 
fail because of the race condition in the char-socket.
A "quick" patch can be found with the Message ID
<1562959033-223586-1-git-send-email-andrey.shinkevich@virtuozzo.com>
"chardev: race condition with tcp_chr_disconnect" by July, 12 of 2019.
I have got no problem with the rest of the tests running them as
$./check -nbd -valgrind
$./check -qcow2 -valgrind
Other issues can appear when running the Valgrind with parameters other 
than default ones. That's why we need such a tool.

Andrey

>> ---
>> Note:
>> The change in the tests 093 and 136 reveals the race condition in chardev.
>> The patch "chardev: race condition with tcp_chr_disconnect" has been emailed
>> to qemu-devel@nongnu.org on July, 12 of 2019 with the Message ID
>> <1562959033-223586-1-git-send-email-andrey.shinkevich@virtuozzo.com>
>>
>>   tests/qemu-iotests/051        |  10 +--
>>   tests/qemu-iotests/051.pc.out |  10 +--
>>   tests/qemu-iotests/093        |   9 +--
>>   tests/qemu-iotests/136        |   1 +
>>   tests/qemu-iotests/186        |  20 +++---
>>   tests/qemu-iotests/186.out    | 152 +++++++++++++++++++++---------------------
>>   tests/qemu-iotests/227        |   4 +-
>>   tests/qemu-iotests/227.out    |   4 +-
>>   tests/qemu-iotests/238        |   2 +-
>>   tests/qemu-iotests/240        |   8 +--
>>   10 files changed, 111 insertions(+), 109 deletions(-)
>>
>> diff --git a/tests/qemu-iotests/051 b/tests/qemu-iotests/051
>> index 200660f..ce942a5 100755
>> --- a/tests/qemu-iotests/051
>> +++ b/tests/qemu-iotests/051
>> @@ -251,11 +251,11 @@ echo
>>   # Cannot use the test image because cache=none might not work on the host FS
>>   # Use cdrom so that we won't get errors about missing media
>>   
>> -run_qemu -drive driver=null-co,cache=none
>> -run_qemu -drive driver=null-co,cache=directsync
>> -run_qemu -drive driver=null-co,cache=writeback
>> -run_qemu -drive driver=null-co,cache=writethrough
>> -run_qemu -drive driver=null-co,cache=unsafe
>> +run_qemu -drive driver=null-co,read-zeroes=on,cache=none
>> +run_qemu -drive driver=null-co,read-zeroes=on,cache=directsync
>> +run_qemu -drive driver=null-co,read-zeroes=on,cache=writeback
>> +run_qemu -drive driver=null-co,read-zeroes=on,cache=writethrough
>> +run_qemu -drive driver=null-co,read-zeroes=on,cache=unsafe
>>   run_qemu -drive driver=null-co,cache=invalid_value
>>   
>>   # Can't test direct=on here because O_DIRECT might not be supported on this FS
>> diff --git a/tests/qemu-iotests/051.pc.out b/tests/qemu-iotests/051.pc.out
>> index 2d811c1..000557c 100644
>> --- a/tests/qemu-iotests/051.pc.out
>> +++ b/tests/qemu-iotests/051.pc.out
>> @@ -245,23 +245,23 @@ QEMU X.Y.Z monitor - type 'help' for more information
>>   
>>   === Cache modes ===
>>   
>> -Testing: -drive driver=null-co,cache=none
>> +Testing: -drive driver=null-co,read-zeroes=on,cache=none
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) quit
>>   
>> -Testing: -drive driver=null-co,cache=directsync
>> +Testing: -drive driver=null-co,read-zeroes=on,cache=directsync
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) quit
>>   
>> -Testing: -drive driver=null-co,cache=writeback
>> +Testing: -drive driver=null-co,read-zeroes=on,cache=writeback
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) quit
>>   
>> -Testing: -drive driver=null-co,cache=writethrough
>> +Testing: -drive driver=null-co,read-zeroes=on,cache=writethrough
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) quit
>>   
>> -Testing: -drive driver=null-co,cache=unsafe
>> +Testing: -drive driver=null-co,read-zeroes=on,cache=unsafe
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) quit
>>   
>> diff --git a/tests/qemu-iotests/093 b/tests/qemu-iotests/093
>> index d88fbc1..4b2cac1 100755
>> --- a/tests/qemu-iotests/093
>> +++ b/tests/qemu-iotests/093
>> @@ -38,7 +38,7 @@ class ThrottleTestCase(iotests.QMPTestCase):
>>       def setUp(self):
>>           self.vm = iotests.VM()
>>           for i in range(0, self.max_drives):
>> -            self.vm.add_drive(self.test_img)
>> +            self.vm.add_drive(self.test_img, "file.read-zeroes=on")
>>           self.vm.launch()
>>   
>>       def tearDown(self):
>> @@ -273,7 +273,8 @@ class ThrottleTestGroupNames(iotests.QMPTestCase):
>>       def setUp(self):
>>           self.vm = iotests.VM()
>>           for i in range(0, self.max_drives):
>> -            self.vm.add_drive(self.test_img, "throttling.iops-total=100")
>> +            self.vm.add_drive(self.test_img,
>> +                              "throttling.iops-total=100,file.read-zeroes=on")
>>           self.vm.launch()
>>   
>>       def tearDown(self):
>> @@ -378,10 +379,10 @@ class ThrottleTestRemovableMedia(iotests.QMPTestCase):
>>       def test_removable_media(self):
>>           # Add a couple of dummy nodes named cd0 and cd1
>>           result = self.vm.qmp("blockdev-add", driver="null-aio",
>> -                             node_name="cd0")
>> +                             read_zeroes=True, node_name="cd0")
>>           self.assert_qmp(result, 'return', {})
>>           result = self.vm.qmp("blockdev-add", driver="null-aio",
>> -                             node_name="cd1")
>> +                             read_zeroes=True, node_name="cd1")
>>           self.assert_qmp(result, 'return', {})
>>   
>>           # Attach a CD drive with cd0 inserted
>> diff --git a/tests/qemu-iotests/136 b/tests/qemu-iotests/136
>> index af7ffa4..a46a7b7 100755
>> --- a/tests/qemu-iotests/136
>> +++ b/tests/qemu-iotests/136
>> @@ -74,6 +74,7 @@ sector = "%d"
>>                             (self.account_invalid and "on" or "off"))
>>           drive_args.append("stats-account-failed=%s" %
>>                             (self.account_failed and "on" or "off"))
>> +        drive_args.append("file.image.read-zeroes=on")
>>           self.create_blkdebug_file()
>>           self.vm = iotests.VM().add_drive('blkdebug:%s:%s' %
>>                                            (blkdebug_file, self.test_img),
>> diff --git a/tests/qemu-iotests/186 b/tests/qemu-iotests/186
>> index 7e7d45b..5f6b18c 100755
>> --- a/tests/qemu-iotests/186
>> +++ b/tests/qemu-iotests/186
>> @@ -86,8 +86,8 @@ echo "=== -blockdev/-device=<node-name> ==="
>>   echo
>>   
>>   for dev in $fixed $removable; do
>> -    check_info_block -blockdev driver=null-co,node-name=null -device $dev,drive=null
>> -    check_info_block -blockdev driver=null-co,node-name=null -device $dev,drive=null,id=qdev_id
>> +    check_info_block -blockdev driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=null
>> +    check_info_block -blockdev driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=null,id=qdev_id
>>   done
>>   
>>   echo
>> @@ -97,7 +97,7 @@ echo
>>   # This creates two BlockBackends that will show up in 'info block'!
>>   # A monitor-owned one from -drive, and anonymous one from -device
>>   for dev in $fixed $removable; do
>> -    check_info_block -drive if=none,driver=null-co,node-name=null -device $dev,drive=null,id=qdev_id
>> +    check_info_block -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=null,id=qdev_id
>>   done
>>   
>>   echo
>> @@ -105,8 +105,8 @@ echo "=== -drive if=none/-device=<bb-name> (with medium) ==="
>>   echo
>>   
>>   for dev in $fixed $removable; do
>> -    check_info_block -drive if=none,driver=null-co,node-name=null -device $dev,drive=none0
>> -    check_info_block -drive if=none,driver=null-co,node-name=null -device $dev,drive=none0,id=qdev_id
>> +    check_info_block -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=none0
>> +    check_info_block -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=none0,id=qdev_id
>>   done
>>   
>>   echo
>> @@ -125,15 +125,15 @@ echo "=== -drive if=... ==="
>>   echo
>>   
>>   check_info_block -drive if=floppy
>> -check_info_block -drive if=floppy,driver=null-co
>> +check_info_block -drive if=floppy,driver=null-co,read-zeroes=on
>>   
>> -check_info_block -drive if=ide,driver=null-co
>> +check_info_block -drive if=ide,driver=null-co,read-zeroes=on
>>   check_info_block -drive if=ide,media=cdrom
>> -check_info_block -drive if=ide,driver=null-co,media=cdrom
>> +check_info_block -drive if=ide,driver=null-co,read-zeroes=on,media=cdrom
>>   
>> -check_info_block -drive if=virtio,driver=null-co
>> +check_info_block -drive if=virtio,driver=null-co,read-zeroes=on
>>   
>> -check_info_block -drive if=pflash,driver=null-co,size=1M
>> +check_info_block -drive if=pflash,driver=null-co,read-zeroes=on,size=1M
>>   
>>   # success, all done
>>   echo "*** done"
>> diff --git a/tests/qemu-iotests/186.out b/tests/qemu-iotests/186.out
>> index 716b01a..5b35040 100644
>> --- a/tests/qemu-iotests/186.out
>> +++ b/tests/qemu-iotests/186.out
>> @@ -54,103 +54,103 @@ qdev_id: [not inserted]
>>   
>>   === -blockdev/-device=<node-name> ===
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device ide-hd,drive=null
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=null
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device ide-hd,drive=null,id=qdev_id
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device scsi-hd,drive=null
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=null
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device scsi-hd,drive=null,id=qdev_id
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device virtio-blk-pci,drive=null
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=null
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device virtio-blk-pci,drive=null,id=qdev_id
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device floppy,drive=null
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=null
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device floppy,drive=null,id=qdev_id
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device ide-cd,drive=null
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=null
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device ide-cd,drive=null,id=qdev_id
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device scsi-cd,drive=null
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=null
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device scsi-cd,drive=null,id=qdev_id
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>> @@ -159,76 +159,76 @@ null: null-co:// (null-co)
>>   
>>   === -drive if=none/-device=<node-name> ===
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device ide-hd,drive=null,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device scsi-hd,drive=null,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device virtio-blk-pci,drive=null,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device floppy,drive=null,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device ide-cd,drive=null,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device scsi-cd,drive=null,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=null,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   
>> -null: null-co:// (null-co)
>> +null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>> @@ -237,103 +237,103 @@ null: null-co:// (null-co)
>>   
>>   === -drive if=none/-device=<bb-name> (with medium) ===
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device ide-hd,drive=none0
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=none0
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device ide-hd,drive=none0,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=none0,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device scsi-hd,drive=none0
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=none0
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device scsi-hd,drive=none0,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=none0,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device virtio-blk-pci,drive=none0
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=none0
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device virtio-blk-pci,drive=none0,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=none0,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device floppy,drive=none0
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=none0
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device floppy,drive=none0,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=none0,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device ide-cd,drive=none0
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=none0
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device ide-cd,drive=none0,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=none0,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device scsi-cd,drive=none0
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=none0
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=none,driver=null-co,node-name=null -device scsi-cd,drive=none0,id=qdev_id
>> +Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=none0,id=qdev_id
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -none0 (null): null-co:// (null-co)
>> +none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      qdev_id
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>> @@ -408,19 +408,19 @@ floppy0: [not inserted]
>>       Removable device: not locked, tray closed
>>   (qemu) quit
>>   
>> -Testing: -drive if=floppy,driver=null-co
>> +Testing: -drive if=floppy,driver=null-co,read-zeroes=on
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -floppy0 (NODE_NAME): null-co:// (null-co)
>> +floppy0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=ide,driver=null-co
>> +Testing: -drive if=ide,driver=null-co,read-zeroes=on
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -ide0-hd0 (NODE_NAME): null-co:// (null-co)
>> +ide0-hd0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>> @@ -433,27 +433,27 @@ ide0-cd0: [not inserted]
>>       Removable device: not locked, tray closed
>>   (qemu) quit
>>   
>> -Testing: -drive if=ide,driver=null-co,media=cdrom
>> +Testing: -drive if=ide,driver=null-co,read-zeroes=on,media=cdrom
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -ide0-cd0 (NODE_NAME): null-co:// (null-co, read-only)
>> +ide0-cd0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} (null-co, read-only)
>>       Attached to:      PATH
>>       Removable device: not locked, tray closed
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=virtio,driver=null-co
>> +Testing: -drive if=virtio,driver=null-co,read-zeroes=on
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -virtio0 (NODE_NAME): null-co:// (null-co)
>> +virtio0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>>   
>> -Testing: -drive if=pflash,driver=null-co,size=1M
>> +Testing: -drive if=pflash,driver=null-co,read-zeroes=on,size=1M
>>   QEMU X.Y.Z monitor - type 'help' for more information
>>   (qemu) info block
>> -pflash0 (NODE_NAME): json:{"driver": "null-co", "size": "1M"} (null-co)
>> +pflash0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co", "size": "1M"} (null-co)
>>       Attached to:      PATH
>>       Cache mode:       writeback
>>   (qemu) quit
>> diff --git a/tests/qemu-iotests/227 b/tests/qemu-iotests/227
>> index bdd727a..637d7c3 100755
>> --- a/tests/qemu-iotests/227
>> +++ b/tests/qemu-iotests/227
>> @@ -57,7 +57,7 @@ echo
>>   echo '=== blockstats with -drive if=virtio ==='
>>   echo
>>   
>> -run_qemu -drive driver=null-co,if=virtio <<EOF
>> +run_qemu -drive driver=null-co,read-zeroes=on,if=virtio <<EOF
>>   { "execute": "qmp_capabilities" }
>>   { "execute": "query-blockstats"}
>>   { "execute": "quit" }
>> @@ -87,7 +87,7 @@ echo
>>   echo '=== blockstats with -blockdev and -device ==='
>>   echo
>>   
>> -run_qemu -blockdev driver=null-co,node-name=null -device virtio-blk,drive=null,id=virtio0 <<EOF
>> +run_qemu -blockdev driver=null-co,read-zeroes=on,node-name=null -device virtio-blk,drive=null,id=virtio0 <<EOF
>>   { "execute": "qmp_capabilities" }
>>   { "execute": "query-blockstats"}
>>   { "execute": "quit" }
>> diff --git a/tests/qemu-iotests/227.out b/tests/qemu-iotests/227.out
>> index e77efaf..3dd3ca5 100644
>> --- a/tests/qemu-iotests/227.out
>> +++ b/tests/qemu-iotests/227.out
>> @@ -2,7 +2,7 @@ QA output created by 227
>>   
>>   === blockstats with -drive if=virtio ===
>>   
>> -Testing: -drive driver=null-co,if=virtio
>> +Testing: -drive driver=null-co,read-zeroes=on,if=virtio
>>   {
>>       QMP_VERSION
>>   }
>> @@ -150,7 +150,7 @@ Testing: -blockdev driver=null-co,node-name=null
>>   
>>   === blockstats with -blockdev and -device ===
>>   
>> -Testing: -blockdev driver=null-co,node-name=null -device virtio-blk,drive=null,id=virtio0
>> +Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device virtio-blk,drive=null,id=virtio0
>>   {
>>       QMP_VERSION
>>   }
>> diff --git a/tests/qemu-iotests/238 b/tests/qemu-iotests/238
>> index 1c0a46f..08bc7e6 100755
>> --- a/tests/qemu-iotests/238
>> +++ b/tests/qemu-iotests/238
>> @@ -31,7 +31,7 @@ else:
>>   vm = iotests.VM()
>>   vm.launch()
>>   
>> -log(vm.qmp('blockdev-add', node_name='hd0', driver='null-co'))
>> +log(vm.qmp('blockdev-add', node_name='hd0', driver='null-co', read_zeroes=True))
>>   log(vm.qmp('object-add', qom_type='iothread', id='iothread0'))
>>   log(vm.qmp('device_add', id='scsi0', driver=virtio_scsi_device, iothread='iothread0'))
>>   log(vm.qmp('device_add', id='scsi-hd0', driver='scsi-hd', drive='hd0'))
>> diff --git a/tests/qemu-iotests/240 b/tests/qemu-iotests/240
>> index 5be6b9c..f73bc07 100755
>> --- a/tests/qemu-iotests/240
>> +++ b/tests/qemu-iotests/240
>> @@ -76,7 +76,7 @@ echo
>>   
>>   run_qemu <<EOF
>>   { "execute": "qmp_capabilities" }
>> -{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "hd0"}}
>> +{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0"}}
>>   { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
>>   { "execute": "device_add", "arguments": {"id": "scsi0", "driver": "${virtio_scsi}", "iothread": "iothread0"}}
>>   { "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver": "scsi-hd", "drive": "hd0"}}
>> @@ -94,7 +94,7 @@ echo
>>   
>>   run_qemu <<EOF
>>   { "execute": "qmp_capabilities" }
>> -{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "hd0", "read-only": true}}
>> +{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0", "read-only": true}}
>>   { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
>>   { "execute": "device_add", "arguments": {"id": "scsi0", "driver": "${virtio_scsi}", "iothread": "iothread0"}}
>>   { "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver": "scsi-hd", "drive": "hd0"}}
>> @@ -112,7 +112,7 @@ echo
>>   
>>   run_qemu <<EOF
>>   { "execute": "qmp_capabilities" }
>> -{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "hd0", "read-only": true}}
>> +{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0", "read-only": true}}
>>   { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
>>   { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread1"}}
>>   { "execute": "device_add", "arguments": {"id": "scsi0", "driver": "${virtio_scsi}", "iothread": "iothread0"}}
>> @@ -134,7 +134,7 @@ echo
>>   
>>   run_qemu <<EOF
>>   { "execute": "qmp_capabilities" }
>> -{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "hd0", "read-only": true}}
>> +{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0", "read-only": true}}
>>   { "execute": "nbd-server-start", "arguments": {"addr":{"type":"unix","data":{"path":"$TEST_DIR/nbd"}}}}
>>   { "execute": "nbd-server-add", "arguments": {"device":"hd0"}}
>>   { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
>>

Patch
diff mbox series

diff --git a/tests/qemu-iotests/051 b/tests/qemu-iotests/051
index 200660f..ce942a5 100755
--- a/tests/qemu-iotests/051
+++ b/tests/qemu-iotests/051
@@ -251,11 +251,11 @@  echo
 # Cannot use the test image because cache=none might not work on the host FS
 # Use cdrom so that we won't get errors about missing media
 
-run_qemu -drive driver=null-co,cache=none
-run_qemu -drive driver=null-co,cache=directsync
-run_qemu -drive driver=null-co,cache=writeback
-run_qemu -drive driver=null-co,cache=writethrough
-run_qemu -drive driver=null-co,cache=unsafe
+run_qemu -drive driver=null-co,read-zeroes=on,cache=none
+run_qemu -drive driver=null-co,read-zeroes=on,cache=directsync
+run_qemu -drive driver=null-co,read-zeroes=on,cache=writeback
+run_qemu -drive driver=null-co,read-zeroes=on,cache=writethrough
+run_qemu -drive driver=null-co,read-zeroes=on,cache=unsafe
 run_qemu -drive driver=null-co,cache=invalid_value
 
 # Can't test direct=on here because O_DIRECT might not be supported on this FS
diff --git a/tests/qemu-iotests/051.pc.out b/tests/qemu-iotests/051.pc.out
index 2d811c1..000557c 100644
--- a/tests/qemu-iotests/051.pc.out
+++ b/tests/qemu-iotests/051.pc.out
@@ -245,23 +245,23 @@  QEMU X.Y.Z monitor - type 'help' for more information
 
 === Cache modes ===
 
-Testing: -drive driver=null-co,cache=none
+Testing: -drive driver=null-co,read-zeroes=on,cache=none
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) quit
 
-Testing: -drive driver=null-co,cache=directsync
+Testing: -drive driver=null-co,read-zeroes=on,cache=directsync
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) quit
 
-Testing: -drive driver=null-co,cache=writeback
+Testing: -drive driver=null-co,read-zeroes=on,cache=writeback
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) quit
 
-Testing: -drive driver=null-co,cache=writethrough
+Testing: -drive driver=null-co,read-zeroes=on,cache=writethrough
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) quit
 
-Testing: -drive driver=null-co,cache=unsafe
+Testing: -drive driver=null-co,read-zeroes=on,cache=unsafe
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) quit
 
diff --git a/tests/qemu-iotests/093 b/tests/qemu-iotests/093
index d88fbc1..4b2cac1 100755
--- a/tests/qemu-iotests/093
+++ b/tests/qemu-iotests/093
@@ -38,7 +38,7 @@  class ThrottleTestCase(iotests.QMPTestCase):
     def setUp(self):
         self.vm = iotests.VM()
         for i in range(0, self.max_drives):
-            self.vm.add_drive(self.test_img)
+            self.vm.add_drive(self.test_img, "file.read-zeroes=on")
         self.vm.launch()
 
     def tearDown(self):
@@ -273,7 +273,8 @@  class ThrottleTestGroupNames(iotests.QMPTestCase):
     def setUp(self):
         self.vm = iotests.VM()
         for i in range(0, self.max_drives):
-            self.vm.add_drive(self.test_img, "throttling.iops-total=100")
+            self.vm.add_drive(self.test_img,
+                              "throttling.iops-total=100,file.read-zeroes=on")
         self.vm.launch()
 
     def tearDown(self):
@@ -378,10 +379,10 @@  class ThrottleTestRemovableMedia(iotests.QMPTestCase):
     def test_removable_media(self):
         # Add a couple of dummy nodes named cd0 and cd1
         result = self.vm.qmp("blockdev-add", driver="null-aio",
-                             node_name="cd0")
+                             read_zeroes=True, node_name="cd0")
         self.assert_qmp(result, 'return', {})
         result = self.vm.qmp("blockdev-add", driver="null-aio",
-                             node_name="cd1")
+                             read_zeroes=True, node_name="cd1")
         self.assert_qmp(result, 'return', {})
 
         # Attach a CD drive with cd0 inserted
diff --git a/tests/qemu-iotests/136 b/tests/qemu-iotests/136
index af7ffa4..a46a7b7 100755
--- a/tests/qemu-iotests/136
+++ b/tests/qemu-iotests/136
@@ -74,6 +74,7 @@  sector = "%d"
                           (self.account_invalid and "on" or "off"))
         drive_args.append("stats-account-failed=%s" %
                           (self.account_failed and "on" or "off"))
+        drive_args.append("file.image.read-zeroes=on")
         self.create_blkdebug_file()
         self.vm = iotests.VM().add_drive('blkdebug:%s:%s' %
                                          (blkdebug_file, self.test_img),
diff --git a/tests/qemu-iotests/186 b/tests/qemu-iotests/186
index 7e7d45b..5f6b18c 100755
--- a/tests/qemu-iotests/186
+++ b/tests/qemu-iotests/186
@@ -86,8 +86,8 @@  echo "=== -blockdev/-device=<node-name> ==="
 echo
 
 for dev in $fixed $removable; do
-    check_info_block -blockdev driver=null-co,node-name=null -device $dev,drive=null
-    check_info_block -blockdev driver=null-co,node-name=null -device $dev,drive=null,id=qdev_id
+    check_info_block -blockdev driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=null
+    check_info_block -blockdev driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=null,id=qdev_id
 done
 
 echo
@@ -97,7 +97,7 @@  echo
 # This creates two BlockBackends that will show up in 'info block'!
 # A monitor-owned one from -drive, and anonymous one from -device
 for dev in $fixed $removable; do
-    check_info_block -drive if=none,driver=null-co,node-name=null -device $dev,drive=null,id=qdev_id
+    check_info_block -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=null,id=qdev_id
 done
 
 echo
@@ -105,8 +105,8 @@  echo "=== -drive if=none/-device=<bb-name> (with medium) ==="
 echo
 
 for dev in $fixed $removable; do
-    check_info_block -drive if=none,driver=null-co,node-name=null -device $dev,drive=none0
-    check_info_block -drive if=none,driver=null-co,node-name=null -device $dev,drive=none0,id=qdev_id
+    check_info_block -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=none0
+    check_info_block -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device $dev,drive=none0,id=qdev_id
 done
 
 echo
@@ -125,15 +125,15 @@  echo "=== -drive if=... ==="
 echo
 
 check_info_block -drive if=floppy
-check_info_block -drive if=floppy,driver=null-co
+check_info_block -drive if=floppy,driver=null-co,read-zeroes=on
 
-check_info_block -drive if=ide,driver=null-co
+check_info_block -drive if=ide,driver=null-co,read-zeroes=on
 check_info_block -drive if=ide,media=cdrom
-check_info_block -drive if=ide,driver=null-co,media=cdrom
+check_info_block -drive if=ide,driver=null-co,read-zeroes=on,media=cdrom
 
-check_info_block -drive if=virtio,driver=null-co
+check_info_block -drive if=virtio,driver=null-co,read-zeroes=on
 
-check_info_block -drive if=pflash,driver=null-co,size=1M
+check_info_block -drive if=pflash,driver=null-co,read-zeroes=on,size=1M
 
 # success, all done
 echo "*** done"
diff --git a/tests/qemu-iotests/186.out b/tests/qemu-iotests/186.out
index 716b01a..5b35040 100644
--- a/tests/qemu-iotests/186.out
+++ b/tests/qemu-iotests/186.out
@@ -54,103 +54,103 @@  qdev_id: [not inserted]
 
 === -blockdev/-device=<node-name> ===
 
-Testing: -blockdev driver=null-co,node-name=null -device ide-hd,drive=null
+Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=null
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-null: null-co:// (null-co)
+null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
     Attached to:      PATH
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -blockdev driver=null-co,node-name=null -device ide-hd,drive=null,id=qdev_id
+Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=null,id=qdev_id
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-null: null-co:// (null-co)
+null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
     Attached to:      qdev_id
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -blockdev driver=null-co,node-name=null -device scsi-hd,drive=null
+Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=null
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-null: null-co:// (null-co)
+null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
     Attached to:      PATH
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -blockdev driver=null-co,node-name=null -device scsi-hd,drive=null,id=qdev_id
+Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=null,id=qdev_id
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-null: null-co:// (null-co)
+null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
     Attached to:      qdev_id
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -blockdev driver=null-co,node-name=null -device virtio-blk-pci,drive=null
+Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=null
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-null: null-co:// (null-co)
+null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
     Attached to:      PATH
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -blockdev driver=null-co,node-name=null -device virtio-blk-pci,drive=null,id=qdev_id
+Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=null,id=qdev_id
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-null: null-co:// (null-co)
+null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
     Attached to:      PATH
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -blockdev driver=null-co,node-name=null -device floppy,drive=null
+Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=null
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-null: null-co:// (null-co)
+null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
     Attached to:      PATH
     Removable device: not locked, tray closed
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -blockdev driver=null-co,node-name=null -device floppy,drive=null,id=qdev_id
+Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=null,id=qdev_id
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-null: null-co:// (null-co)
+null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
     Attached to:      qdev_id
     Removable device: not locked, tray closed
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -blockdev driver=null-co,node-name=null -device ide-cd,drive=null
+Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=null
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-null: null-co:// (null-co)
+null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
     Attached to:      PATH
     Removable device: not locked, tray closed
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -blockdev driver=null-co,node-name=null -device ide-cd,drive=null,id=qdev_id
+Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=null,id=qdev_id
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-null: null-co:// (null-co)
+null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
     Attached to:      qdev_id
     Removable device: not locked, tray closed
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -blockdev driver=null-co,node-name=null -device scsi-cd,drive=null
+Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=null
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-null: null-co:// (null-co)
+null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
     Attached to:      PATH
     Removable device: not locked, tray closed
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -blockdev driver=null-co,node-name=null -device scsi-cd,drive=null,id=qdev_id
+Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=null,id=qdev_id
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-null: null-co:// (null-co)
+null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
     Attached to:      qdev_id
     Removable device: not locked, tray closed
     Cache mode:       writeback
@@ -159,76 +159,76 @@  null: null-co:// (null-co)
 
 === -drive if=none/-device=<node-name> ===
 
-Testing: -drive if=none,driver=null-co,node-name=null -device ide-hd,drive=null,id=qdev_id
+Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=null,id=qdev_id
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-none0 (null): null-co:// (null-co)
+none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Removable device: not locked, tray closed
     Cache mode:       writeback
 
-null: null-co:// (null-co)
+null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      qdev_id
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -drive if=none,driver=null-co,node-name=null -device scsi-hd,drive=null,id=qdev_id
+Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=null,id=qdev_id
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-none0 (null): null-co:// (null-co)
+none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Removable device: not locked, tray closed
     Cache mode:       writeback
 
-null: null-co:// (null-co)
+null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      qdev_id
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -drive if=none,driver=null-co,node-name=null -device virtio-blk-pci,drive=null,id=qdev_id
+Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=null,id=qdev_id
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-none0 (null): null-co:// (null-co)
+none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Removable device: not locked, tray closed
     Cache mode:       writeback
 
-null: null-co:// (null-co)
+null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      PATH
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -drive if=none,driver=null-co,node-name=null -device floppy,drive=null,id=qdev_id
+Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=null,id=qdev_id
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-none0 (null): null-co:// (null-co)
+none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Removable device: not locked, tray closed
     Cache mode:       writeback
 
-null: null-co:// (null-co)
+null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      qdev_id
     Removable device: not locked, tray closed
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -drive if=none,driver=null-co,node-name=null -device ide-cd,drive=null,id=qdev_id
+Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=null,id=qdev_id
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-none0 (null): null-co:// (null-co)
+none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Removable device: not locked, tray closed
     Cache mode:       writeback
 
-null: null-co:// (null-co)
+null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      qdev_id
     Removable device: not locked, tray closed
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -drive if=none,driver=null-co,node-name=null -device scsi-cd,drive=null,id=qdev_id
+Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=null,id=qdev_id
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-none0 (null): null-co:// (null-co)
+none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Removable device: not locked, tray closed
     Cache mode:       writeback
 
-null: null-co:// (null-co)
+null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      qdev_id
     Removable device: not locked, tray closed
     Cache mode:       writeback
@@ -237,103 +237,103 @@  null: null-co:// (null-co)
 
 === -drive if=none/-device=<bb-name> (with medium) ===
 
-Testing: -drive if=none,driver=null-co,node-name=null -device ide-hd,drive=none0
+Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=none0
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-none0 (null): null-co:// (null-co)
+none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      PATH
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -drive if=none,driver=null-co,node-name=null -device ide-hd,drive=none0,id=qdev_id
+Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-hd,drive=none0,id=qdev_id
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-none0 (null): null-co:// (null-co)
+none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      qdev_id
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -drive if=none,driver=null-co,node-name=null -device scsi-hd,drive=none0
+Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=none0
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-none0 (null): null-co:// (null-co)
+none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      PATH
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -drive if=none,driver=null-co,node-name=null -device scsi-hd,drive=none0,id=qdev_id
+Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-hd,drive=none0,id=qdev_id
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-none0 (null): null-co:// (null-co)
+none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      qdev_id
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -drive if=none,driver=null-co,node-name=null -device virtio-blk-pci,drive=none0
+Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=none0
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-none0 (null): null-co:// (null-co)
+none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      PATH
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -drive if=none,driver=null-co,node-name=null -device virtio-blk-pci,drive=none0,id=qdev_id
+Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device virtio-blk-pci,drive=none0,id=qdev_id
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-none0 (null): null-co:// (null-co)
+none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      PATH
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -drive if=none,driver=null-co,node-name=null -device floppy,drive=none0
+Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=none0
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-none0 (null): null-co:// (null-co)
+none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      PATH
     Removable device: not locked, tray closed
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -drive if=none,driver=null-co,node-name=null -device floppy,drive=none0,id=qdev_id
+Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device floppy,drive=none0,id=qdev_id
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-none0 (null): null-co:// (null-co)
+none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      qdev_id
     Removable device: not locked, tray closed
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -drive if=none,driver=null-co,node-name=null -device ide-cd,drive=none0
+Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=none0
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-none0 (null): null-co:// (null-co)
+none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      PATH
     Removable device: not locked, tray closed
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -drive if=none,driver=null-co,node-name=null -device ide-cd,drive=none0,id=qdev_id
+Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device ide-cd,drive=none0,id=qdev_id
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-none0 (null): null-co:// (null-co)
+none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      qdev_id
     Removable device: not locked, tray closed
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -drive if=none,driver=null-co,node-name=null -device scsi-cd,drive=none0
+Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=none0
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-none0 (null): null-co:// (null-co)
+none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      PATH
     Removable device: not locked, tray closed
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -drive if=none,driver=null-co,node-name=null -device scsi-cd,drive=none0,id=qdev_id
+Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device scsi-cd,drive=none0,id=qdev_id
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-none0 (null): null-co:// (null-co)
+none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      qdev_id
     Removable device: not locked, tray closed
     Cache mode:       writeback
@@ -408,19 +408,19 @@  floppy0: [not inserted]
     Removable device: not locked, tray closed
 (qemu) quit
 
-Testing: -drive if=floppy,driver=null-co
+Testing: -drive if=floppy,driver=null-co,read-zeroes=on
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-floppy0 (NODE_NAME): null-co:// (null-co)
+floppy0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      PATH
     Removable device: not locked, tray closed
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -drive if=ide,driver=null-co
+Testing: -drive if=ide,driver=null-co,read-zeroes=on
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-ide0-hd0 (NODE_NAME): null-co:// (null-co)
+ide0-hd0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      PATH
     Cache mode:       writeback
 (qemu) quit
@@ -433,27 +433,27 @@  ide0-cd0: [not inserted]
     Removable device: not locked, tray closed
 (qemu) quit
 
-Testing: -drive if=ide,driver=null-co,media=cdrom
+Testing: -drive if=ide,driver=null-co,read-zeroes=on,media=cdrom
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-ide0-cd0 (NODE_NAME): null-co:// (null-co, read-only)
+ide0-cd0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} (null-co, read-only)
     Attached to:      PATH
     Removable device: not locked, tray closed
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -drive if=virtio,driver=null-co
+Testing: -drive if=virtio,driver=null-co,read-zeroes=on
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-virtio0 (NODE_NAME): null-co:// (null-co)
+virtio0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
     Attached to:      PATH
     Cache mode:       writeback
 (qemu) quit
 
-Testing: -drive if=pflash,driver=null-co,size=1M
+Testing: -drive if=pflash,driver=null-co,read-zeroes=on,size=1M
 QEMU X.Y.Z monitor - type 'help' for more information
 (qemu) info block
-pflash0 (NODE_NAME): json:{"driver": "null-co", "size": "1M"} (null-co)
+pflash0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co", "size": "1M"} (null-co)
     Attached to:      PATH
     Cache mode:       writeback
 (qemu) quit
diff --git a/tests/qemu-iotests/227 b/tests/qemu-iotests/227
index bdd727a..637d7c3 100755
--- a/tests/qemu-iotests/227
+++ b/tests/qemu-iotests/227
@@ -57,7 +57,7 @@  echo
 echo '=== blockstats with -drive if=virtio ==='
 echo
 
-run_qemu -drive driver=null-co,if=virtio <<EOF
+run_qemu -drive driver=null-co,read-zeroes=on,if=virtio <<EOF
 { "execute": "qmp_capabilities" }
 { "execute": "query-blockstats"}
 { "execute": "quit" }
@@ -87,7 +87,7 @@  echo
 echo '=== blockstats with -blockdev and -device ==='
 echo
 
-run_qemu -blockdev driver=null-co,node-name=null -device virtio-blk,drive=null,id=virtio0 <<EOF
+run_qemu -blockdev driver=null-co,read-zeroes=on,node-name=null -device virtio-blk,drive=null,id=virtio0 <<EOF
 { "execute": "qmp_capabilities" }
 { "execute": "query-blockstats"}
 { "execute": "quit" }
diff --git a/tests/qemu-iotests/227.out b/tests/qemu-iotests/227.out
index e77efaf..3dd3ca5 100644
--- a/tests/qemu-iotests/227.out
+++ b/tests/qemu-iotests/227.out
@@ -2,7 +2,7 @@  QA output created by 227
 
 === blockstats with -drive if=virtio ===
 
-Testing: -drive driver=null-co,if=virtio
+Testing: -drive driver=null-co,read-zeroes=on,if=virtio
 {
     QMP_VERSION
 }
@@ -150,7 +150,7 @@  Testing: -blockdev driver=null-co,node-name=null
 
 === blockstats with -blockdev and -device ===
 
-Testing: -blockdev driver=null-co,node-name=null -device virtio-blk,drive=null,id=virtio0
+Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device virtio-blk,drive=null,id=virtio0
 {
     QMP_VERSION
 }
diff --git a/tests/qemu-iotests/238 b/tests/qemu-iotests/238
index 1c0a46f..08bc7e6 100755
--- a/tests/qemu-iotests/238
+++ b/tests/qemu-iotests/238
@@ -31,7 +31,7 @@  else:
 vm = iotests.VM()
 vm.launch()
 
-log(vm.qmp('blockdev-add', node_name='hd0', driver='null-co'))
+log(vm.qmp('blockdev-add', node_name='hd0', driver='null-co', read_zeroes=True))
 log(vm.qmp('object-add', qom_type='iothread', id='iothread0'))
 log(vm.qmp('device_add', id='scsi0', driver=virtio_scsi_device, iothread='iothread0'))
 log(vm.qmp('device_add', id='scsi-hd0', driver='scsi-hd', drive='hd0'))
diff --git a/tests/qemu-iotests/240 b/tests/qemu-iotests/240
index 5be6b9c..f73bc07 100755
--- a/tests/qemu-iotests/240
+++ b/tests/qemu-iotests/240
@@ -76,7 +76,7 @@  echo
 
 run_qemu <<EOF
 { "execute": "qmp_capabilities" }
-{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "hd0"}}
+{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0"}}
 { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
 { "execute": "device_add", "arguments": {"id": "scsi0", "driver": "${virtio_scsi}", "iothread": "iothread0"}}
 { "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver": "scsi-hd", "drive": "hd0"}}
@@ -94,7 +94,7 @@  echo
 
 run_qemu <<EOF
 { "execute": "qmp_capabilities" }
-{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "hd0", "read-only": true}}
+{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0", "read-only": true}}
 { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
 { "execute": "device_add", "arguments": {"id": "scsi0", "driver": "${virtio_scsi}", "iothread": "iothread0"}}
 { "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver": "scsi-hd", "drive": "hd0"}}
@@ -112,7 +112,7 @@  echo
 
 run_qemu <<EOF
 { "execute": "qmp_capabilities" }
-{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "hd0", "read-only": true}}
+{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0", "read-only": true}}
 { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
 { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread1"}}
 { "execute": "device_add", "arguments": {"id": "scsi0", "driver": "${virtio_scsi}", "iothread": "iothread0"}}
@@ -134,7 +134,7 @@  echo
 
 run_qemu <<EOF
 { "execute": "qmp_capabilities" }
-{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "hd0", "read-only": true}}
+{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0", "read-only": true}}
 { "execute": "nbd-server-start", "arguments": {"addr":{"type":"unix","data":{"path":"$TEST_DIR/nbd"}}}}
 { "execute": "nbd-server-add", "arguments": {"device":"hd0"}}
 { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}