summaryrefslogtreecommitdiffstats
path: root/hw/ide/core.c
diff options
context:
space:
mode:
authorPaolo Bonzini2014-08-04 23:11:05 +0200
committerStefan Hajnoczi2014-08-15 19:03:12 +0200
commit69f72a22213a6909bf4aef06133c976b508e370a (patch)
tree0289bb35578ec73e3b43f9372bf0364884f4f687 /hw/ide/core.c
parentide-test: add test for werror=stop (diff)
downloadqemu-69f72a22213a6909bf4aef06133c976b508e370a.tar.gz
qemu-69f72a22213a6909bf4aef06133c976b508e370a.tar.xz
qemu-69f72a22213a6909bf4aef06133c976b508e370a.zip
ide: stash aiocb for flushes
This ensures that operations are completed after a reset Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: John Snow <jsnow@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'hw/ide/core.c')
-rw-r--r--hw/ide/core.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/hw/ide/core.c b/hw/ide/core.c
index db191a6c3e..79985f9f49 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -831,6 +831,8 @@ static void ide_flush_cb(void *opaque, int ret)
{
IDEState *s = opaque;
+ s->pio_aiocb = NULL;
+
if (ret < 0) {
/* XXX: What sector number to set here? */
if (ide_handle_rw_error(s, -ret, BM_STATUS_RETRY_FLUSH)) {
@@ -853,7 +855,7 @@ void ide_flush_cache(IDEState *s)
s->status |= BUSY_STAT;
bdrv_acct_start(s->bs, &s->acct, 0, BDRV_ACCT_FLUSH);
- bdrv_aio_flush(s->bs, ide_flush_cb, s);
+ s->pio_aiocb = bdrv_aio_flush(s->bs, ide_flush_cb, s);
}
static void ide_cfata_metadata_inquiry(IDEState *s)