Kevin Wolf <kw...@redhat.com> writes: > Requests could return success even though they failed when bdrv_aio_readv > returned NULL for a backing file read. > > Reported-by: Chunqiang Tang <ct...@us.ibm.com> > Signed-off-by: Kevin Wolf <kw...@redhat.com> > --- > block/qcow2.c | 4 +++- > 1 files changed, 3 insertions(+), 1 deletions(-) > > diff --git a/block/qcow2.c b/block/qcow2.c > index 28338bf..647c2a4 100644 > --- a/block/qcow2.c > +++ b/block/qcow2.c > @@ -479,8 +479,10 @@ static void qcow2_aio_read_cb(void *opaque, int ret) > BLKDBG_EVENT(bs->file, BLKDBG_READ_BACKING_AIO); > acb->hd_aiocb = bdrv_aio_readv(bs->backing_hd, > acb->sector_num, > &acb->hd_qiov, n1, qcow2_aio_read_cb, > acb); > - if (acb->hd_aiocb == NULL) > + if (acb->hd_aiocb == NULL) { > + ret = -EIO; > goto done; > + } > } else { > ret = qcow2_schedule_bh(qcow2_aio_read_bh, acb); > if (ret < 0)
Good catch. Nearby if (qcow2_decompress_cluster(bs, acb->cluster_offset) < 0) goto done; looks suspicious to my ignorant eyes. Is it okay?