From: Kevin Wolf <kwolf@redhat.com>
To: bharata@linux.vnet.ibm.com
Cc: Anthony Liguori <aliguori@us.ibm.com>,
Anand Avati <aavati@redhat.com>,
Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>,
Vijay Bellur <vbellur@redhat.com>,
Amar Tumballi <amarts@redhat.com>,
qemu-devel@nongnu.org, Blue Swirl <blauwirbel@gmail.com>,
Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v6 2/2] block: Support GlusterFS as a QEMU block backend
Date: Wed, 05 Sep 2012 12:01:58 +0200 [thread overview]
Message-ID: <50472316.4060106@redhat.com> (raw)
In-Reply-To: <20120905074106.GA28080@in.ibm.com>
Am 05.09.2012 09:41, schrieb Bharata B Rao:
> On Thu, Aug 09, 2012 at 06:32:16PM +0530, Bharata B Rao wrote:
>> +static void qemu_gluster_complete_aio(GlusterAIOCB *acb)
>> +{
>> + int ret;
>> +
>> + if (acb->canceled) {
>> + qemu_aio_release(acb);
>> + return;
>> + }
>> +
>> + if (acb->ret == acb->size) {
>> + ret = 0; /* Success */
>> + } else if (acb->ret < 0) {
>> + ret = acb->ret; /* Read/Write failed */
>> + } else {
>> + ret = -EIO; /* Partial read/write - fail it */
>> + }
>> + acb->common.cb(acb->common.opaque, ret);
>
> The .cb() here is bdrv_co_io_em_complete(). It does qemu_coroutine_enter(),
> handles the return value and comes back here.
Right.
.cb is set by qemu_gluster_aio_rw/flush(), and the only way these can be
called is through bdrv_co_io_em() and bdrv_co_flush(), which both set
bdrv_co_io_em_complete as the callback.
> But if the bdrv_read or bdrv_write or bdrv_flush was called from a
> coroutine context (as against they themselves creating a new coroutine),
> the above .cb() call above doesn't return to this point.
Why?
A coroutine that yields before it's completed must be reentered, no
matter whether it's been created for a single request or if it already
existed.
Conversely, a coroutine that you enter, always yields at some point and
then you return from the qemu_coroutine_enter() and get back to this
line of code.
If you never come back to this point, there's a bug somewhere.
> Hence I won't
> be able to release the acb and decrement the qemu_aio_count.
>
> What could be the issue here ? In general, how do I ensure that my
> aio calls get completed correctly in such scenarios where bdrv_read etc
> are called from coroutine context rather than from main thread context ?
>
> Creating qcow2 image would lead to this scenario where
> ->bdrv_create (=qcow2_create) will create a coroutine and subsequently
> read and write are called within qcow2_create in coroutine context itself.
Can you describe in more detail what code paths it's taking and at which
point you're thinking it's wrong?
Kevin
next prev parent reply other threads:[~2012-09-05 10:02 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-09 13:00 [Qemu-devel] [PATCH v6 0/2] GlusterFS support in QEMU - v6 Bharata B Rao
2012-08-09 13:01 ` [Qemu-devel] [PATCH v6 1/2] qemu: Add a config option for GlusterFS as block backend Bharata B Rao
2012-08-09 13:02 ` [Qemu-devel] [PATCH v6 2/2] block: Support GlusterFS as a QEMU " Bharata B Rao
2012-08-13 12:50 ` Kevin Wolf
2012-08-14 4:38 ` Bharata B Rao
2012-08-14 8:29 ` Kevin Wolf
2012-08-14 9:34 ` Bharata B Rao
2012-08-14 9:58 ` Kevin Wolf
2012-09-06 8:29 ` Avi Kivity
2012-09-06 15:40 ` Bharata B Rao
2012-09-06 15:44 ` Paolo Bonzini
2012-09-06 15:47 ` Daniel P. Berrange
2012-09-06 16:04 ` ronnie sahlberg
2012-09-06 16:06 ` Avi Kivity
2012-09-07 3:24 ` Bharata B Rao
2012-09-07 9:19 ` Daniel P. Berrange
2012-09-07 9:36 ` Paolo Bonzini
2012-09-07 9:57 ` Kevin Wolf
2012-09-12 9:22 ` Bharata B Rao
2012-09-12 9:24 ` Paolo Bonzini
2012-09-07 10:00 ` Kevin Wolf
2012-09-07 10:03 ` Daniel P. Berrange
2012-09-07 10:05 ` Paolo Bonzini
2012-08-15 5:21 ` Bharata B Rao
2012-08-15 8:00 ` Kevin Wolf
2012-08-15 9:22 ` Bharata B Rao
2012-08-15 8:51 ` Bharata B Rao
2012-09-05 7:41 ` Bharata B Rao
2012-09-05 9:57 ` Bharata B Rao
2012-09-06 7:23 ` Paolo Bonzini
2012-09-06 9:06 ` Kevin Wolf
2012-09-06 9:38 ` Paolo Bonzini
2012-09-06 10:07 ` Kevin Wolf
2012-09-06 10:18 ` Paolo Bonzini
2012-09-06 10:29 ` Kevin Wolf
2012-09-06 11:01 ` Paolo Bonzini
2012-09-07 15:06 ` Bharata B Rao
2012-09-07 15:11 ` Paolo Bonzini
2012-09-08 14:22 ` Bharata B Rao
2012-09-05 10:01 ` Kevin Wolf [this message]
2012-09-05 10:43 ` Bharata B Rao
2012-09-06 7:35 ` Paolo Bonzini
2012-09-07 5:46 ` Bharata B Rao
2012-08-13 9:49 ` [Qemu-devel] [PATCH v6 0/2] GlusterFS support in QEMU - v6 Bharata B Rao
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=50472316.4060106@redhat.com \
--to=kwolf@redhat.com \
--cc=aavati@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=amarts@redhat.com \
--cc=bharata@linux.vnet.ibm.com \
--cc=blauwirbel@gmail.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@linux.vnet.ibm.com \
--cc=vbellur@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).