summaryrefslogtreecommitdiffstats
path: root/block.c
diff options
context:
space:
mode:
authorAvi Kivity2009-06-23 15:20:36 +0200
committerAnthony Liguori2009-07-10 20:44:30 +0200
commit36afc451599175eb8f03f1962de74e7f7a8af4db (patch)
treeffbbdd33f4baf0460a6ef021892c1d89f3df19d4 /block.c
parentflush pending aio requests (diff)
downloadqemu-36afc451599175eb8f03f1962de74e7f7a8af4db.tar.gz
qemu-36afc451599175eb8f03f1962de74e7f7a8af4db.tar.xz
qemu-36afc451599175eb8f03f1962de74e7f7a8af4db.zip
block: Clean up after deleting BHs
Commit 6a7ad299 ("Call qemu_bh_delete at bdrv_aio_bh_cb") deletes emulated aio bottom halves to prevent endless accumulation. However, it leaves a stale ->bh pointer, which is then waited on when the aio is reused. Zeroing the pointer fixes the issue, allowing vmdk format images to be used. Signed-off-by: Avi Kivity <avi@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'block.c')
-rw-r--r--block.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/block.c b/block.c
index aca5a6d282..cefbe77485 100644
--- a/block.c
+++ b/block.c
@@ -1374,6 +1374,7 @@ static void bdrv_aio_cancel_em(BlockDriverAIOCB *blockacb)
{
BlockDriverAIOCBSync *acb = (BlockDriverAIOCBSync *)blockacb;
qemu_bh_delete(acb->bh);
+ acb->bh = NULL;
qemu_aio_release(acb);
}
@@ -1391,6 +1392,7 @@ static void bdrv_aio_bh_cb(void *opaque)
qemu_vfree(acb->bounce);
acb->common.cb(acb->common.opaque, acb->ret);
qemu_bh_delete(acb->bh);
+ acb->bh = NULL;
qemu_aio_release(acb);
}