From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35799) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1avx89-0000q2-8p for qemu-devel@nongnu.org; Thu, 28 Apr 2016 21:22:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1avx88-0008SS-9f for qemu-devel@nongnu.org; Thu, 28 Apr 2016 21:22:05 -0400 Date: Fri, 29 Apr 2016 09:22:03 +0800 From: Fam Zheng Message-ID: <20160429012203.GD1421@ad.usersys.redhat.com> References: <1461849406-29743-1-git-send-email-kwolf@redhat.com> <1461849406-29743-4-git-send-email-kwolf@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1461849406-29743-4-git-send-email-kwolf@redhat.com> Subject: Re: [Qemu-devel] [PATCH v2 03/17] block: Support AIO drivers in bdrv_driver_preadv/pwritev() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Kevin Wolf Cc: qemu-block@nongnu.org, mreitz@redhat.com, stefanha@redhat.com, sw@weilnetz.de, qemu-devel@nongnu.org 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 > Reviewed-by: Eric Blake > --- > 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; > } > } >