@ -61,10 +61,10 @@ struct BdrvDirtyBitmap {
# define COROUTINE_POOL_RESERVATION 64 /* number of coroutines to reserve */
static void bdrv_dev_change_media_cb ( BlockDriverState * bs , bool load ) ;
static BlockDriver AIOCB * bdrv_aio_readv_em ( BlockDriverState * bs ,
static BlockAIOCB * bdrv_aio_readv_em ( BlockDriverState * bs ,
int64_t sector_num , QEMUIOVector * qiov , int nb_sectors ,
BlockDriverCompletionFunc * cb , void * opaque ) ;
static BlockDriver AIOCB * bdrv_aio_writev_em ( BlockDriverState * bs ,
static BlockAIOCB * bdrv_aio_writev_em ( BlockDriverState * bs ,
int64_t sector_num , QEMUIOVector * qiov , int nb_sectors ,
BlockDriverCompletionFunc * cb , void * opaque ) ;
static int coroutine_fn bdrv_co_readv_em ( BlockDriverState * bs ,
@ -79,14 +79,14 @@ static int coroutine_fn bdrv_co_do_preadv(BlockDriverState *bs,
static int coroutine_fn bdrv_co_do_pwritev ( BlockDriverState * bs ,
int64_t offset , unsigned int bytes , QEMUIOVector * qiov ,
BdrvRequestFlags flags ) ;
static BlockDriver AIOCB * bdrv_co_aio_rw_vector ( BlockDriverState * bs ,
int64_t sector_num ,
QEMUIOVector * qiov ,
int nb_sectors ,
BdrvRequestFlags flags ,
BlockDriverCompletionFunc * cb ,
void * opaque ,
bool is_write ) ;
static BlockAIOCB * bdrv_co_aio_rw_vector ( BlockDriverState * bs ,
int64_t sector_num ,
QEMUIOVector * qiov ,
int nb_sectors ,
BdrvRequestFlags flags ,
BlockDriverCompletionFunc * cb ,
void * opaque ,
bool is_write ) ;
static void coroutine_fn bdrv_co_do_rw ( void * opaque ) ;
static int coroutine_fn bdrv_co_do_write_zeroes ( BlockDriverState * bs ,
int64_t sector_num , int nb_sectors , BdrvRequestFlags flags ) ;
@ -4413,9 +4413,9 @@ int bdrv_get_backing_file_depth(BlockDriverState *bs)
/**************************************************************/
/* async I/Os */
BlockDriver AIOCB * bdrv_aio_readv ( BlockDriverState * bs , int64_t sector_num ,
QEMUIOVector * qiov , int nb_sectors ,
BlockDriverCompletionFunc * cb , void * opaque )
BlockAIOCB * bdrv_aio_readv ( BlockDriverState * bs , int64_t sector_num ,
QEMUIOVector * qiov , int nb_sectors ,
BlockDriverCompletionFunc * cb , void * opaque )
{
trace_bdrv_aio_readv ( bs , sector_num , nb_sectors , opaque ) ;
@ -4423,9 +4423,9 @@ BlockDriverAIOCB *bdrv_aio_readv(BlockDriverState *bs, int64_t sector_num,
cb , opaque , false ) ;
}
BlockDriver AIOCB * bdrv_aio_writev ( BlockDriverState * bs , int64_t sector_num ,
QEMUIOVector * qiov , int nb_sectors ,
BlockDriverCompletionFunc * cb , void * opaque )
BlockAIOCB * bdrv_aio_writev ( BlockDriverState * bs , int64_t sector_num ,
QEMUIOVector * qiov , int nb_sectors ,
BlockDriverCompletionFunc * cb , void * opaque )
{
trace_bdrv_aio_writev ( bs , sector_num , nb_sectors , opaque ) ;
@ -4433,7 +4433,7 @@ BlockDriverAIOCB *bdrv_aio_writev(BlockDriverState *bs, int64_t sector_num,
cb , opaque , true ) ;
}
BlockDriver AIOCB * bdrv_aio_write_zeroes ( BlockDriverState * bs ,
BlockAIOCB * bdrv_aio_write_zeroes ( BlockDriverState * bs ,
int64_t sector_num , int nb_sectors , BdrvRequestFlags flags ,
BlockDriverCompletionFunc * cb , void * opaque )
{
@ -4627,7 +4627,7 @@ int bdrv_aio_multiwrite(BlockDriverState *bs, BlockRequest *reqs, int num_reqs)
return 0 ;
}
void bdrv_aio_cancel ( BlockDriver AIOCB * acb )
void bdrv_aio_cancel ( BlockAIOCB * acb )
{
qemu_aio_ref ( acb ) ;
bdrv_aio_cancel_async ( acb ) ;
@ -4646,7 +4646,7 @@ void bdrv_aio_cancel(BlockDriverAIOCB *acb)
/* Async version of aio cancel. The caller is not blocked if the acb implements
* cancel_async , otherwise we do nothing and let the request normally complete .
* In either case the completion callback must be called . */
void bdrv_aio_cancel_async ( BlockDriver AIOCB * acb )
void bdrv_aio_cancel_async ( BlockAIOCB * acb )
{
if ( acb - > aiocb_info - > cancel_async ) {
acb - > aiocb_info - > cancel_async ( acb ) ;
@ -4656,23 +4656,23 @@ void bdrv_aio_cancel_async(BlockDriverAIOCB *acb)
/**************************************************************/
/* async block device emulation */
typedef struct BlockDriver AIOCBSync {
BlockDriver AIOCB common ;
typedef struct BlockAIOCBSync {
BlockAIOCB common ;
QEMUBH * bh ;
int ret ;
/* vector translation state */
QEMUIOVector * qiov ;
uint8_t * bounce ;
int is_write ;
} BlockDriver AIOCBSync ;
} BlockAIOCBSync ;
static const AIOCBInfo bdrv_em_aiocb_info = {
. aiocb_size = sizeof ( BlockDriver AIOCBSync ) ,
. aiocb_size = sizeof ( BlockAIOCBSync ) ,
} ;
static void bdrv_aio_bh_cb ( void * opaque )
{
BlockDriver AIOCBSync * acb = opaque ;
BlockAIOCBSync * acb = opaque ;
if ( ! acb - > is_write & & acb - > ret > = 0 ) {
qemu_iovec_from_buf ( acb - > qiov , 0 , acb - > bounce , acb - > qiov - > size ) ;
@ -4684,16 +4684,16 @@ static void bdrv_aio_bh_cb(void *opaque)
qemu_aio_unref ( acb ) ;
}
static BlockDriver AIOCB * bdrv_aio_rw_vector ( BlockDriverState * bs ,
int64_t sector_num ,
QEMUIOVector * qiov ,
int nb_sectors ,
BlockDriverCompletionFunc * cb ,
void * opaque ,
int is_write )
static BlockAIOCB * bdrv_aio_rw_vector ( BlockDriverState * bs ,
int64_t sector_num ,
QEMUIOVector * qiov ,
int nb_sectors ,
BlockDriverCompletionFunc * cb ,
void * opaque ,
int is_write )
{
BlockDriver AIOCBSync * acb ;
BlockAIOCBSync * acb ;
acb = qemu_aio_get ( & bdrv_em_aiocb_info , bs , cb , opaque ) ;
acb - > is_write = is_write ;
@ -4715,14 +4715,14 @@ static BlockDriverAIOCB *bdrv_aio_rw_vector(BlockDriverState *bs,
return & acb - > common ;
}
static BlockDriver AIOCB * bdrv_aio_readv_em ( BlockDriverState * bs ,
static BlockAIOCB * bdrv_aio_readv_em ( BlockDriverState * bs ,
int64_t sector_num , QEMUIOVector * qiov , int nb_sectors ,
BlockDriverCompletionFunc * cb , void * opaque )
{
return bdrv_aio_rw_vector ( bs , sector_num , qiov , nb_sectors , cb , opaque , 0 ) ;
}
static BlockDriver AIOCB * bdrv_aio_writev_em ( BlockDriverState * bs ,
static BlockAIOCB * bdrv_aio_writev_em ( BlockDriverState * bs ,
int64_t sector_num , QEMUIOVector * qiov , int nb_sectors ,
BlockDriverCompletionFunc * cb , void * opaque )
{
@ -4730,21 +4730,21 @@ static BlockDriverAIOCB *bdrv_aio_writev_em(BlockDriverState *bs,
}
typedef struct BlockDriver AIOCBCoroutine {
BlockDriver AIOCB common ;
typedef struct BlockAIOCBCoroutine {
BlockAIOCB common ;
BlockRequest req ;
bool is_write ;
bool * done ;
QEMUBH * bh ;
} BlockDriver AIOCBCoroutine ;
} BlockAIOCBCoroutine ;
static const AIOCBInfo bdrv_em_co_aiocb_info = {
. aiocb_size = sizeof ( BlockDriver AIOCBCoroutine ) ,
. aiocb_size = sizeof ( BlockAIOCBCoroutine ) ,
} ;
static void bdrv_co_em_bh ( void * opaque )
{
BlockDriver AIOCBCoroutine * acb = opaque ;
BlockAIOCBCoroutine * acb = opaque ;
acb - > common . cb ( acb - > common . opaque , acb - > req . error ) ;
@ -4755,7 +4755,7 @@ static void bdrv_co_em_bh(void *opaque)
/* Invoke bdrv_co_do_readv/bdrv_co_do_writev */
static void coroutine_fn bdrv_co_do_rw ( void * opaque )
{
BlockDriver AIOCBCoroutine * acb = opaque ;
BlockAIOCBCoroutine * acb = opaque ;
BlockDriverState * bs = acb - > common . bs ;
if ( ! acb - > is_write ) {
@ -4770,17 +4770,17 @@ static void coroutine_fn bdrv_co_do_rw(void *opaque)
qemu_bh_schedule ( acb - > bh ) ;
}
static BlockDriver AIOCB * bdrv_co_aio_rw_vector ( BlockDriverState * bs ,
int64_t sector_num ,
QEMUIOVector * qiov ,
int nb_sectors ,
BdrvRequestFlags flags ,
BlockDriverCompletionFunc * cb ,
void * opaque ,
bool is_write )
static BlockAIOCB * bdrv_co_aio_rw_vector ( BlockDriverState * bs ,
int64_t sector_num ,
QEMUIOVector * qiov ,
int nb_sectors ,
BdrvRequestFlags flags ,
BlockDriverCompletionFunc * cb ,
void * opaque ,
bool is_write )
{
Coroutine * co ;
BlockDriver AIOCBCoroutine * acb ;
BlockAIOCBCoroutine * acb ;
acb = qemu_aio_get ( & bdrv_em_co_aiocb_info , bs , cb , opaque ) ;
acb - > req . sector = sector_num ;
@ -4797,7 +4797,7 @@ static BlockDriverAIOCB *bdrv_co_aio_rw_vector(BlockDriverState *bs,
static void coroutine_fn bdrv_aio_flush_co_entry ( void * opaque )
{
BlockDriver AIOCBCoroutine * acb = opaque ;
BlockAIOCBCoroutine * acb = opaque ;
BlockDriverState * bs = acb - > common . bs ;
acb - > req . error = bdrv_co_flush ( bs ) ;
@ -4805,13 +4805,13 @@ static void coroutine_fn bdrv_aio_flush_co_entry(void *opaque)
qemu_bh_schedule ( acb - > bh ) ;
}
BlockDriver AIOCB * bdrv_aio_flush ( BlockDriverState * bs ,
BlockAIOCB * bdrv_aio_flush ( BlockDriverState * bs ,
BlockDriverCompletionFunc * cb , void * opaque )
{
trace_bdrv_aio_flush ( bs , opaque ) ;
Coroutine * co ;
BlockDriver AIOCBCoroutine * acb ;
BlockAIOCBCoroutine * acb ;
acb = qemu_aio_get ( & bdrv_em_co_aiocb_info , bs , cb , opaque ) ;
@ -4823,7 +4823,7 @@ BlockDriverAIOCB *bdrv_aio_flush(BlockDriverState *bs,
static void coroutine_fn bdrv_aio_discard_co_entry ( void * opaque )
{
BlockDriver AIOCBCoroutine * acb = opaque ;
BlockAIOCBCoroutine * acb = opaque ;
BlockDriverState * bs = acb - > common . bs ;
acb - > req . error = bdrv_co_discard ( bs , acb - > req . sector , acb - > req . nb_sectors ) ;
@ -4831,12 +4831,12 @@ static void coroutine_fn bdrv_aio_discard_co_entry(void *opaque)
qemu_bh_schedule ( acb - > bh ) ;
}
BlockDriver AIOCB * bdrv_aio_discard ( BlockDriverState * bs ,
BlockAIOCB * bdrv_aio_discard ( BlockDriverState * bs ,
int64_t sector_num , int nb_sectors ,
BlockDriverCompletionFunc * cb , void * opaque )
{
Coroutine * co ;
BlockDriver AIOCBCoroutine * acb ;
BlockAIOCBCoroutine * acb ;
trace_bdrv_aio_discard ( bs , sector_num , nb_sectors , opaque ) ;
@ -4863,7 +4863,7 @@ void bdrv_init_with_whitelist(void)
void * qemu_aio_get ( const AIOCBInfo * aiocb_info , BlockDriverState * bs ,
BlockDriverCompletionFunc * cb , void * opaque )
{
BlockDriver AIOCB * acb ;
BlockAIOCB * acb ;
acb = g_slice_alloc ( aiocb_info - > aiocb_size ) ;
acb - > aiocb_info = aiocb_info ;
@ -4876,13 +4876,13 @@ void *qemu_aio_get(const AIOCBInfo *aiocb_info, BlockDriverState *bs,
void qemu_aio_ref ( void * p )
{
BlockDriver AIOCB * acb = p ;
BlockAIOCB * acb = p ;
acb - > refcnt + + ;
}
void qemu_aio_unref ( void * p )
{
BlockDriver AIOCB * acb = p ;
BlockAIOCB * acb = p ;
assert ( acb - > refcnt > 0 ) ;
if ( - - acb - > refcnt = = 0 ) {
g_slice_free1 ( acb - > aiocb_info - > aiocb_size , acb ) ;
@ -4912,7 +4912,7 @@ static int coroutine_fn bdrv_co_io_em(BlockDriverState *bs, int64_t sector_num,
CoroutineIOCompletion co = {
. coroutine = qemu_coroutine_self ( ) ,
} ;
BlockDriver AIOCB * acb ;
BlockAIOCB * acb ;
if ( is_write ) {
acb = bs - > drv - > bdrv_aio_writev ( bs , sector_num , iov , nb_sectors ,
@ -4978,7 +4978,7 @@ int coroutine_fn bdrv_co_flush(BlockDriverState *bs)
if ( bs - > drv - > bdrv_co_flush_to_disk ) {
ret = bs - > drv - > bdrv_co_flush_to_disk ( bs ) ;
} else if ( bs - > drv - > bdrv_aio_flush ) {
BlockDriver AIOCB * acb ;
BlockAIOCB * acb ;
CoroutineIOCompletion co = {
. coroutine = qemu_coroutine_self ( ) ,
} ;
@ -5153,7 +5153,7 @@ int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num,
if ( bs - > drv - > bdrv_co_discard ) {
ret = bs - > drv - > bdrv_co_discard ( bs , sector_num , num ) ;
} else {
BlockDriver AIOCB * acb ;
BlockAIOCB * acb ;
CoroutineIOCompletion co = {
. coroutine = qemu_coroutine_self ( ) ,
} ;
@ -5279,7 +5279,7 @@ int bdrv_ioctl(BlockDriverState *bs, unsigned long int req, void *buf)
return - ENOTSUP ;
}
BlockDriver AIOCB * bdrv_aio_ioctl ( BlockDriverState * bs ,
BlockAIOCB * bdrv_aio_ioctl ( BlockDriverState * bs ,
unsigned long int req , void * buf ,
BlockDriverCompletionFunc * cb , void * opaque )
{