]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
Fix vectored aio bounce handling immediate errors (Avi Kivity)
authoraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>
Sat, 28 Mar 2009 16:11:20 +0000 (16:11 +0000)
committerAnthony Liguori <aliguori@us.ibm.com>
Thu, 14 May 2009 13:09:24 +0000 (08:09 -0500)
If a bounced vectored aio fails immediately (the inner aio submission
returning NULL) then the bounce handler erronously returns an aio
request which will never be completed (and which crashes when cancelled).

Fix by detecting that the inner request has failed and propagating the
error.

Signed-off-by: Avi Kivity <avi@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6892 c046a42c-6fe2-441c-8c8c-71466251a162

block.c

diff --git a/block.c b/block.c
index 689ea372d9614446fe7066e0998a7f2c16ea050a..b68a8da09c1c80fc05ec1b1bd45830bf950b0027 100644 (file)
--- a/block.c
+++ b/block.c
@@ -1383,6 +1383,11 @@ static BlockDriverAIOCB *bdrv_aio_rw_vector(BlockDriverState *bs,
         s->aiocb = bdrv_aio_read(bs, sector_num, s->bounce, nb_sectors,
                                  bdrv_aio_rw_vector_cb, s);
     }
+    if (!s->aiocb) {
+        qemu_vfree(s->bounce);
+        qemu_aio_release(s);
+        return NULL;
+    }
     return &s->common;
 }