qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-block] [PATCH v2 03/17] block: Support AIO drivers in bdrv_dri


From: Fam Zheng
Subject: Re: [Qemu-block] [PATCH v2 03/17] block: Support AIO drivers in bdrv_driver_preadv/pwritev()
Date: Fri, 29 Apr 2016 09:22:03 +0800
User-agent: Mutt/1.6.0 (2016-04-01)

On Thu, 04/28 15:16, Kevin Wolf wrote:
> Instead of registering emulation functions as .bdrv_co_writev, just
> directly check whether the function is there or not, and use the AIO
> interface if it isn't. This makes the read/write functions more
> consistent with how things are done in other places (flush, discard,
> etc.)
> 
> Signed-off-by: Kevin Wolf <address@hidden>
> Reviewed-by: Eric Blake <address@hidden>
> ---
>  block/io.c   | 126 
> ++++++++++++++++++++++++-----------------------------------
>  trace-events |   1 -
>  2 files changed, 52 insertions(+), 75 deletions(-)
> 
> diff --git a/block/io.c b/block/io.c
> index c9b2864..86d97c3 100644
> --- a/block/io.c
> +++ b/block/io.c
> @@ -40,12 +40,6 @@ static BlockAIOCB *bdrv_aio_readv_em(BlockDriverState *bs,
>  static BlockAIOCB *bdrv_aio_writev_em(BlockDriverState *bs,
>          int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
>          BlockCompletionFunc *cb, void *opaque);
> -static int coroutine_fn bdrv_co_readv_em(BlockDriverState *bs,
> -                                         int64_t sector_num, int nb_sectors,
> -                                         QEMUIOVector *iov);
> -static int coroutine_fn bdrv_co_writev_em(BlockDriverState *bs,
> -                                         int64_t sector_num, int nb_sectors,
> -                                         QEMUIOVector *iov);
>  static BlockAIOCB *bdrv_co_aio_rw_vector(BlockDriverState *bs,
>                                           int64_t sector_num,
>                                           QEMUIOVector *qiov,
> @@ -125,19 +119,13 @@ void bdrv_io_limits_update_group(BlockDriverState *bs, 
> const char *group)
>  
>  void bdrv_setup_io_funcs(BlockDriver *bdrv)
>  {
> -    /* Block drivers without coroutine functions need emulation */
> -    if (!bdrv->bdrv_co_readv) {
> -        bdrv->bdrv_co_readv = bdrv_co_readv_em;
> -        bdrv->bdrv_co_writev = bdrv_co_writev_em;
> -
> -        /* bdrv_co_readv_em()/brdv_co_writev_em() work in terms of aio, so if
> -         * the block driver lacks aio we need to emulate that too.
> -         */
> -        if (!bdrv->bdrv_aio_readv) {
> -            /* add AIO emulation layer */
> -            bdrv->bdrv_aio_readv = bdrv_aio_readv_em;
> -            bdrv->bdrv_aio_writev = bdrv_aio_writev_em;
> -        }
> +    /* bdrv_co_readv_em()/brdv_co_writev_em() work in terms of aio, so if
> +     * the block driver lacks aio we need to emulate that.
> +     */
> +    if (!bdrv->bdrv_aio_readv) {

I'd also AND with !bdrv->bdrv_co_readv, because in that case the em functions
are assigned but not used.

> +        /* add AIO emulation layer */
> +        bdrv->bdrv_aio_readv = bdrv_aio_readv_em;
> +        bdrv->bdrv_aio_writev = bdrv_aio_writev_em;
>      }
>  }
>  



reply via email to

[Prev in Thread] Current Thread [Next in Thread]