On Fri 08 Dec 2017 08:13:48 PM CET, John Snow <js...@redhat.com> wrote:
>>>> qemu_io('-f', iotests.imgfmt, >>>> - '-c', 'write -P %d %d %d' % (i, i*1024*1024, num_kb * >>>> 1024), >>>> + '-c', 'write -P 0xFF %dk %dk' % (i * 512, num_kb), >>> >>> I guess changing from a variable to a fixed 0xff pattern doesn't >>> make a difference? >> >> I noticed that with the previous code we would write zeroes to the >> first image (i == 0), and with that I can't reproduce the bug. I >> assume that block-stream doesn't copy the data in that case. Changing >> it to anything != 0 solves the problem. > > I think I ran into a similar problem with an AHCI test once. It's this bit from bdrv_co_do_copy_on_readv() (which is the way block-stream is implemented): if (drv->bdrv_co_pwrite_zeroes && buffer_is_zero(bounce_buffer, pnum)) { /* FIXME: Should we (perhaps conditionally) be setting * BDRV_REQ_MAY_UNMAP, if it will allow for a sparser copy * that still correctly reads as zero? */ ret = bdrv_co_do_pwrite_zeroes(bs, cluster_offset, pnum, 0); } else { /* This does not change the data on the disk, it is not * necessary to flush even in cache=writethrough mode. */ ret = bdrv_driver_pwritev(bs, cluster_offset, pnum, &local_qiov, 0); } Berto