[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;
> }
> }
>
- [Qemu-block] [PATCH v2 00/17] block: Convert .bdrv_read/write to .bdrv_preadv/pwritev, Kevin Wolf, 2016/04/28
- [Qemu-block] [PATCH v2 01/17] block: Introduce bdrv_driver_preadv(), Kevin Wolf, 2016/04/28
- [Qemu-block] [PATCH v2 02/17] block: Introduce bdrv_driver_pwritev(), Kevin Wolf, 2016/04/28
- [Qemu-block] [PATCH v2 03/17] block: Support AIO drivers in bdrv_driver_preadv/pwritev(), Kevin Wolf, 2016/04/28
- Re: [Qemu-block] [PATCH v2 03/17] block: Support AIO drivers in bdrv_driver_preadv/pwritev(),
Fam Zheng <=
- [Qemu-block] [PATCH v2 05/17] block: Introduce .bdrv_co_preadv/pwritev BlockDriver function, Kevin Wolf, 2016/04/28
- [Qemu-block] [PATCH v2 04/17] block: Rename bdrv_co_do_preadv/writev to bdrv_co_preadv/writev, Kevin Wolf, 2016/04/28
- [Qemu-block] [PATCH v2 06/17] bochs: Implement .bdrv_co_preadv() interface, Kevin Wolf, 2016/04/28
- [Qemu-block] [PATCH v2 08/17] dmg: Implement .bdrv_co_preadv() interface, Kevin Wolf, 2016/04/28
- [Qemu-block] [PATCH v2 07/17] cloop: Implement .bdrv_co_preadv() interface, Kevin Wolf, 2016/04/28