@@ -153,7 +153,11 @@ static ssize_t block_get_buffer(void *opaque, uint8_t *buf, int64_t pos,
static int bdrv_fclose(void *opaque)
{
- return bdrv_flush(opaque);
+ BlockDriverState *bs = (BlockDriverState *)opaque;
+ int ret = bdrv_flush(bs);
+
+ aio_context_release(bdrv_get_aio_context(bs));
+ return ret;
}
static const QEMUFileOps bdrv_read_ops = {
@@ -169,10 +173,18 @@ static const QEMUFileOps bdrv_write_ops = {
static QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int is_writable)
{
+ QEMUFile *file;
+
if (is_writable) {
- return qemu_fopen_ops(bs, &bdrv_write_ops);
+ file = qemu_fopen_ops(bs, &bdrv_write_ops);
+ } else {
+ file = qemu_fopen_ops(bs, &bdrv_read_ops);
+ }
+
+ if (file != NULL) {
+ aio_context_acquire(bdrv_get_aio_context(bs));
}
- return qemu_fopen_ops(bs, &bdrv_read_ops);
+ return file;
}