[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 2/6] sheepdog: restart I/O when socket becomes r
From: |
Kevin Wolf |
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 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120605 Thunderbird/13.0 |
Am 27.06.2012 00:26, schrieb MORITA Kazutaka:
> Currently, no one reenters the yielded coroutine. This fixes it.
>
> Signed-off-by: MORITA Kazutaka <address@hidden>
> ---
> 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;
> }
>
- Re: [Qemu-devel] [PATCH 2/6] sheepdog: restart I/O when socket becomes ready in do_co_req(),
Kevin Wolf <=