From: Kevin Wolf <kwolf@redhat.com>
To: MORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp>
Cc: Paolo Bonzini <pbonzini@redhat.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 2/6] sheepdog: restart I/O when socket becomes ready in do_co_req()
Date: Tue, 03 Jul 2012 15:09:34 +0200 [thread overview]
Message-ID: <4FF2EF0E.2030802@redhat.com> (raw)
In-Reply-To: <1340749583-5292-3-git-send-email-morita.kazutaka@lab.ntt.co.jp>
Am 27.06.2012 00:26, schrieb MORITA Kazutaka:
> Currently, no one reenters the yielded coroutine. This fixes it.
>
> Signed-off-by: MORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp>
> ---
> block/sheepdog.c | 14 ++++++++++++++
> 1 files changed, 14 insertions(+), 0 deletions(-)
Paolo, is this how qemu_co_recv/send are supposed to be used? Shouldn't
the functions take care of reentering the coroutine like the block
functions do?
Kevin
>
> diff --git a/block/sheepdog.c b/block/sheepdog.c
> index afd06aa..0b49c6d 100644
> --- a/block/sheepdog.c
> +++ b/block/sheepdog.c
> @@ -577,10 +577,21 @@ out:
> return ret;
> }
>
> +static void restart_co_req(void *opaque)
> +{
> + Coroutine *co = opaque;
> +
> + qemu_coroutine_enter(co, NULL);
> +}
> +
> static coroutine_fn int do_co_req(int sockfd, SheepdogReq *hdr, void *data,
> unsigned int *wlen, unsigned int *rlen)
> {
> int ret;
> + Coroutine *co;
> +
> + co = qemu_coroutine_self();
> + qemu_aio_set_fd_handler(sockfd, NULL, restart_co_req, NULL, co);
>
> socket_set_block(sockfd);
> ret = send_co_req(sockfd, hdr, data, wlen);
> @@ -588,6 +599,8 @@ static coroutine_fn int do_co_req(int sockfd, SheepdogReq *hdr, void *data,
> goto out;
> }
>
> + qemu_aio_set_fd_handler(sockfd, restart_co_req, NULL, NULL, co);
> +
> ret = qemu_co_recv(sockfd, hdr, sizeof(*hdr));
> if (ret < sizeof(*hdr)) {
> error_report("failed to get a rsp, %s", strerror(errno));
> @@ -609,6 +622,7 @@ static coroutine_fn int do_co_req(int sockfd, SheepdogReq *hdr, void *data,
> }
> ret = 0;
> out:
> + qemu_aio_set_fd_handler(sockfd, NULL, NULL, NULL, NULL);
> socket_set_nonblock(sockfd);
> return ret;
> }
>
next parent reply other threads:[~2012-07-03 13:09 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1340749583-5292-1-git-send-email-morita.kazutaka@lab.ntt.co.jp>
[not found] ` <1340749583-5292-3-git-send-email-morita.kazutaka@lab.ntt.co.jp>
2012-07-03 13:09 ` Kevin Wolf [this message]
2012-07-03 13:44 ` [Qemu-devel] [PATCH 2/6] sheepdog: restart I/O when socket becomes ready in do_co_req() Paolo Bonzini
[not found] ` <1340749583-5292-4-git-send-email-morita.kazutaka@lab.ntt.co.jp>
2012-07-03 13:15 ` [Qemu-devel] [PATCH 3/6] sheepdog: use coroutine based socket functions in coroutine context Kevin Wolf
2012-07-04 0:25 ` Peter Crosthwaite
2012-07-04 8:37 ` Kevin Wolf
2012-07-04 15:27 ` MORITA Kazutaka
2012-07-03 13:26 ` [Qemu-devel] [PATCH 0/6] sheepdog: various fixes 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=4FF2EF0E.2030802@redhat.com \
--to=kwolf@redhat.com \
--cc=morita.kazutaka@lab.ntt.co.jp \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/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.