From: Kevin Wolf <kwolf@redhat.com>
To: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Cc: Anthony Liguori <aliguori@us.ibm.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
qemu-devel@nongnu.org, Zhi Yong Wu <wuzhy@cn.ibm.com>,
Avi Kivity <avi@redhat.com>, Christoph Hellwig <hch@lst.de>
Subject: Re: [Qemu-devel] [PATCH 4/6] block: switch bdrv_aio_readv() to coroutines
Date: Wed, 12 Oct 2011 15:07:56 +0200 [thread overview]
Message-ID: <4E95912C.8070804@redhat.com> (raw)
In-Reply-To: <1317831427-477-5-git-send-email-stefanha@linux.vnet.ibm.com>
Am 05.10.2011 18:17, schrieb Stefan Hajnoczi:
> More sync, aio, and coroutine unification. Make bdrv_aio_readv() go
> through coroutine request processing.
>
> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
> ---
> block.c | 48 +++++++++++++++++++++++++++++++++++-------------
> 1 files changed, 35 insertions(+), 13 deletions(-)
>
> diff --git a/block.c b/block.c
> index 90c29db..b83e911 100644
> --- a/block.c
> +++ b/block.c
> @@ -78,6 +78,15 @@ static int coroutine_fn bdrv_co_do_readv(BlockDriverState *bs,
> int64_t sector_num, int nb_sectors, QEMUIOVector *qiov);
> static int coroutine_fn bdrv_co_do_writev(BlockDriverState *bs,
> int64_t sector_num, int nb_sectors, QEMUIOVector *qiov);
> +static BlockDriverAIOCB *bdrv_co_aio_rw_vector(BlockDriverState *bs,
> + int64_t sector_num,
> + QEMUIOVector *qiov,
> + int nb_sectors,
> + BlockDriverCompletionFunc *cb,
> + void *opaque,
> + bool is_write,
> + CoroutineEntry *entry);
> +static void coroutine_fn bdrv_co_do_rw(void *opaque);
>
> static QTAILQ_HEAD(, BlockDriverState) bdrv_states =
> QTAILQ_HEAD_INITIALIZER(bdrv_states);
> @@ -2346,17 +2355,10 @@ BlockDriverAIOCB *bdrv_aio_readv(BlockDriverState *bs, int64_t sector_num,
> QEMUIOVector *qiov, int nb_sectors,
> BlockDriverCompletionFunc *cb, void *opaque)
> {
> - BlockDriver *drv = bs->drv;
> -
> trace_bdrv_aio_readv(bs, sector_num, nb_sectors, opaque);
>
> - if (!drv)
> - return NULL;
> - if (bdrv_check_request(bs, sector_num, nb_sectors))
> - return NULL;
> -
> - return drv->bdrv_aio_readv(bs, sector_num, qiov, nb_sectors,
> - cb, opaque);
> + return bdrv_co_aio_rw_vector(bs, sector_num, qiov, nb_sectors,
> + cb, opaque, false, bdrv_co_do_rw);
> }
>
> typedef struct BlockCompleteData {
> @@ -2803,6 +2805,7 @@ static void bdrv_co_rw_bh(void *opaque)
> qemu_aio_release(acb);
> }
>
> +/* Invoke .bdrv_co_readv/.bdrv_co_writev */
> static void coroutine_fn bdrv_co_rw(void *opaque)
> {
> BlockDriverAIOCBCoroutine *acb = opaque;
> @@ -2820,13 +2823,32 @@ static void coroutine_fn bdrv_co_rw(void *opaque)
> qemu_bh_schedule(acb->bh);
> }
>
> +/* Invoke bdrv_co_do_readv/bdrv_co_do_writev */
> +static void coroutine_fn bdrv_co_do_rw(void *opaque)
> +{
> + BlockDriverAIOCBCoroutine *acb = opaque;
> + BlockDriverState *bs = acb->common.bs;
> +
> + if (!acb->is_write) {
> + acb->req.error = bdrv_co_do_readv(bs, acb->req.sector,
> + acb->req.nb_sectors, acb->req.qiov);
> + } else {
> + acb->req.error = bdrv_co_do_writev(bs, acb->req.sector,
> + acb->req.nb_sectors, acb->req.qiov);
> + }
> +
> + acb->bh = qemu_bh_new(bdrv_co_rw_bh, acb);
> + qemu_bh_schedule(acb->bh);
> +}
The difference between the existing bdrv_co_rw and the new bdrv_co_do_rw
is that the former directly calls drv->... whereas the latter does some
checks first.
I think you could just switch bdrv_co_rw to do the checks. If I'm not
mistaken, the other path is dead code anyway after this change.
Actually, it looks like this series leaves quite a bit of dead code
behind, but I need to apply all patches and check the result to be sure.
Kevin
next prev parent reply other threads:[~2011-10-12 13:05 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-05 16:17 [Qemu-devel] [PATCH 0/6] block: do request processing in a coroutine Stefan Hajnoczi
2011-10-05 16:17 ` [Qemu-devel] [PATCH 1/6] block: directly invoke .bdrv_aio_*() in bdrv_co_io_em() Stefan Hajnoczi
2011-10-05 16:17 ` [Qemu-devel] [PATCH 2/6] block: split out bdrv_co_do_readv() and bdrv_co_do_writev() Stefan Hajnoczi
2011-10-05 16:17 ` [Qemu-devel] [PATCH 3/6] block: switch bdrv_read()/bdrv_write() to coroutines Stefan Hajnoczi
2011-10-11 6:44 ` Zhi Yong Wu
2011-10-12 9:03 ` Stefan Hajnoczi
2011-10-12 9:11 ` Zhi Yong Wu
2011-10-12 12:53 ` Kevin Wolf
2011-10-05 16:17 ` [Qemu-devel] [PATCH 4/6] block: switch bdrv_aio_readv() " Stefan Hajnoczi
2011-10-12 13:07 ` Kevin Wolf [this message]
2011-10-05 16:17 ` [Qemu-devel] [PATCH 5/6] block: mark blocks dirty on coroutine write completion Stefan Hajnoczi
2011-10-05 16:17 ` [Qemu-devel] [PATCH 6/6] block: switch bdrv_aio_writev() to coroutines Stefan Hajnoczi
2011-10-11 6:46 ` Zhi Yong Wu
2011-10-11 6:49 ` [Qemu-devel] [PATCH 0/6] block: do request processing in a coroutine Zhi Yong Wu
2011-10-12 13:21 ` Kevin Wolf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E95912C.8070804@redhat.com \
--to=kwolf@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=avi@redhat.com \
--cc=hch@lst.de \
--cc=mtosatti@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@linux.vnet.ibm.com \
--cc=wuzhy@cn.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.