From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48509) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X1eAG-0001Bi-UL for qemu-devel@nongnu.org; Mon, 30 Jun 2014 12:10:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X1eAB-0007Hg-54 for qemu-devel@nongnu.org; Mon, 30 Jun 2014 12:10:44 -0400 Received: from mx1.redhat.com ([209.132.183.28]:64310) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X1eAA-0007HM-SO for qemu-devel@nongnu.org; Mon, 30 Jun 2014 12:10:39 -0400 Message-ID: <53B18BF3.6020403@redhat.com> Date: Mon, 30 Jun 2014 18:10:27 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <1404143260-9368-1-git-send-email-ming.lei@canonical.com> <1404143260-9368-2-git-send-email-ming.lei@canonical.com> In-Reply-To: <1404143260-9368-2-git-send-email-ming.lei@canonical.com> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v1 1/3] block: block: introduce bdrv_io_plug() and bdrv_io_unplug() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Ming Lei , Peter Maydell , qemu-devel@nongnu.org, Stefan Hajnoczi Cc: Kevin Wolf , Ming Lei , Fam Zheng , "Michael S. Tsirkin" Il 30/06/2014 17:47, Ming Lei ha scritto: > From: Ming Lei > > This patch introduces these two APIs so that following > patches can support queuing I/O requests and submitting them > at batch for improving I/O performance. > > Signed-off-by: Ming Lei > --- > block.c | 22 ++++++++++++++++++++++ > include/block/block.h | 3 +++ > include/block/block_int.h | 4 ++++ > 3 files changed, 29 insertions(+) > > diff --git a/block.c b/block.c > index 217f523..2b4ec5b 100644 > --- a/block.c > +++ b/block.c > @@ -1910,6 +1910,7 @@ void bdrv_drain_all(void) > bool bs_busy; > > aio_context_acquire(aio_context); > + bdrv_io_unplug(bs); > bdrv_start_throttled_reqs(bs); > bs_busy = bdrv_requests_pending(bs); > bs_busy |= aio_poll(aio_context, bs_busy); > @@ -5774,3 +5775,24 @@ bool bdrv_is_first_non_filter(BlockDriverState *candidate) > > return false; > } > + > +void bdrv_io_plug(BlockDriverState *bs) > +{ > + BlockDriver *drv = bs->drv; > + if (drv && drv->bdrv_io_plug) { > + drv->bdrv_io_plug(bs); > + } else if (bs->file) { > + bdrv_io_plug(bs->file); > + } > +} > + > +int bdrv_io_unplug(BlockDriverState *bs) > +{ > + BlockDriver *drv = bs->drv; > + if (drv && drv->bdrv_io_unplug) { > + return drv->bdrv_io_unplug(bs); > + } else if (bs->file) { > + return bdrv_io_unplug(bs->file); > + } > + return 0; I think this should return void (and that's how you use it in patch 3 indeed). If you fix this you can add my Reviewed-by tag. Paolo > +} > diff --git a/include/block/block.h b/include/block/block.h > index d0baf4f..ccced61 100644 > --- a/include/block/block.h > +++ b/include/block/block.h > @@ -578,4 +578,7 @@ AioContext *bdrv_get_aio_context(BlockDriverState *bs); > */ > void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context); > > +void bdrv_io_plug(BlockDriverState *bs); > +int bdrv_io_unplug(BlockDriverState *bs); > + > #endif > diff --git a/include/block/block_int.h b/include/block/block_int.h > index 715c761..b5412fa 100644 > --- a/include/block/block_int.h > +++ b/include/block/block_int.h > @@ -257,6 +257,10 @@ struct BlockDriver { > void (*bdrv_attach_aio_context)(BlockDriverState *bs, > AioContext *new_context); > > + /* io queue for linux-aio */ > + void (*bdrv_io_plug)(BlockDriverState *bs); > + int (*bdrv_io_unplug)(BlockDriverState *bs); > + > QLIST_ENTRY(BlockDriver) list; > }; > >