@ -307,6 +307,29 @@ static void raw_parse_flags(int bdrv_flags, int *open_flags)
}
}
static void raw_detach_aio_context ( BlockDriverState * bs )
{
# ifdef CONFIG_LINUX_AIO
BDRVRawState * s = bs - > opaque ;
if ( s - > use_aio ) {
laio_detach_aio_context ( s - > aio_ctx , bdrv_get_aio_context ( bs ) ) ;
}
# endif
}
static void raw_attach_aio_context ( BlockDriverState * bs ,
AioContext * new_context )
{
# ifdef CONFIG_LINUX_AIO
BDRVRawState * s = bs - > opaque ;
if ( s - > use_aio ) {
laio_attach_aio_context ( s - > aio_ctx , new_context ) ;
}
# endif
}
# ifdef CONFIG_LINUX_AIO
static int raw_set_aio ( void * * aio_ctx , int * use_aio , int bdrv_flags )
{
@ -447,6 +470,8 @@ static int raw_open_common(BlockDriverState *bs, QDict *options,
}
# endif
raw_attach_aio_context ( bs , bdrv_get_aio_context ( bs ) ) ;
ret = 0 ;
fail :
if ( filename & & ( bdrv_flags & BDRV_O_TEMPORARY ) ) {
@ -1059,6 +1084,9 @@ static BlockDriverAIOCB *raw_aio_flush(BlockDriverState *bs,
static void raw_close ( BlockDriverState * bs )
{
BDRVRawState * s = bs - > opaque ;
raw_detach_aio_context ( bs ) ;
if ( s - > fd > = 0 ) {
qemu_close ( s - > fd ) ;
s - > fd = - 1 ;
@ -1478,6 +1506,9 @@ static BlockDriver bdrv_file = {
. bdrv_get_allocated_file_size
= raw_get_allocated_file_size ,
. bdrv_detach_aio_context = raw_detach_aio_context ,
. bdrv_attach_aio_context = raw_attach_aio_context ,
. create_options = raw_create_options ,
} ;
@ -1878,6 +1909,9 @@ static BlockDriver bdrv_host_device = {
. bdrv_get_allocated_file_size
= raw_get_allocated_file_size ,
. bdrv_detach_aio_context = raw_detach_aio_context ,
. bdrv_attach_aio_context = raw_attach_aio_context ,
/* generic scsi device */
# ifdef __linux__
. bdrv_ioctl = hdev_ioctl ,
@ -2020,6 +2054,9 @@ static BlockDriver bdrv_host_floppy = {
. bdrv_get_allocated_file_size
= raw_get_allocated_file_size ,
. bdrv_detach_aio_context = raw_detach_aio_context ,
. bdrv_attach_aio_context = raw_attach_aio_context ,
/* removable device support */
. bdrv_is_inserted = floppy_is_inserted ,
. bdrv_media_changed = floppy_media_changed ,
@ -2145,6 +2182,9 @@ static BlockDriver bdrv_host_cdrom = {
. bdrv_get_allocated_file_size
= raw_get_allocated_file_size ,
. bdrv_detach_aio_context = raw_detach_aio_context ,
. bdrv_attach_aio_context = raw_attach_aio_context ,
/* removable device support */
. bdrv_is_inserted = cdrom_is_inserted ,
. bdrv_eject = cdrom_eject ,
@ -2276,6 +2316,9 @@ static BlockDriver bdrv_host_cdrom = {
. bdrv_get_allocated_file_size
= raw_get_allocated_file_size ,
. bdrv_detach_aio_context = raw_detach_aio_context ,
. bdrv_attach_aio_context = raw_attach_aio_context ,
/* removable device support */
. bdrv_is_inserted = cdrom_is_inserted ,
. bdrv_eject = cdrom_eject ,