On 06.02.20 17:42, Vladimir Sementsov-Ogievskiy wrote: > Commit 7a3f542fbd "block/io: refactor padding" occasionally dropped > aligning for zero-length request: bdrv_init_padding() blindly return > false if bytes == 0, like there is nothing to align. > > This leads the following command to crash: > > ./qemu-io --image-opts -c 'write 1 0' \ > driver=blkdebug,align=512,image.driver=null-co,image.size=512 > >>> qemu-io: block/io.c:1955: bdrv_aligned_pwritev: Assertion > `(offset & (align - 1)) == 0' failed. >>> Aborted (core dumped) > > Prior to 7a3f542fbd we does aligning of such zero requests. Instead of > recovering this behavior let's just do nothing on such requests as it > is useless. > > Note that driver may have special meaning of zero-length reqeusts, like > qcow2_co_pwritev_compressed_part, so we can't skip any zero-length > operation. But for unaligned ones, we can't pass it to driver anyway. > > This commit also fixes crash in iotest 80 running with -nocache: > > ./check -nocache -qcow2 80 > > which crashes on same assertion due to trying to read empty extra data > in qcow2_do_read_snapshots(). > > Cc: qemu-sta...@nongnu.org # v4.2 > Fixes: 7a3f542fbd > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> > --- > block/io.c | 28 +++++++++++++++++++++++++++- > 1 file changed, 27 insertions(+), 1 deletion(-)
Zero-length reads would still trigger CORs when padded. But there is no reason to assume or rely on this, so: Reviewed-by: Max Reitz <mre...@redhat.com> (block/io.c is Stefan’s department. :-)) Max
signature.asc
Description: OpenPGP digital signature