From: Mats Petersson <mats.petersson@citrix.com>
To: xen-devel@lists.xen.org
Subject: Re: !!!!!help!I wouldn't be able to meet the deadline!(about read operation in qemu-img-xen)
Date: Wed, 19 Dec 2012 10:28:29 +0000 [thread overview]
Message-ID: <50D196CD.6080706@citrix.com> (raw)
In-Reply-To: <5b77509e.1174a.13bb2437601.Coremail.hxkhust@126.com>
On 19/12/12 08:24, hxkhust wrote:
> Hi,guys,
>
> what I concern is the following (which is in the
> /xen-4.1.2/tools/ioemu-qemu-xen/block-qcow.c) :
> static void qcow_aio_read_cb(void *opaque, int ret)
> {
> ........
> if (!acb->cluster_offset) {
> if (bs->backing_hd) {
> /* read from the base image */
> acb->hd_aiocb = bdrv_aio_read(bs->backing_hd, //*************
> acb->sector_num, acb->buf, acb->n, qcow_aio_read_cb, acb);
> //**************
> //I read what the acb->buf points to, but find the reading operation
> is not finished.
> if (acb->hd_aiocb == NULL)
> goto fail;
> } else {
> /* Note: in this case, no need to wait */
> memset(acb->buf, 0, 512 * acb->n);
> goto redo;
> }
> } else if (acb->cluster_offset & QCOW_OFLAG_COMPRESSED) {
> /* add AIO support for compressed blocks ? */
> if (decompress_cluster(s, acb->cluster_offset) < 0)
> goto fail;
> memcpy(acb->buf,
> s->cluster_cache + index_in_cluster * 512, 512 * acb->n);
> goto redo;
> .........
> //********************************************************************************************8
> when the statement:
> acb->hd_aiocb = bdrv_aio_read(bs->backing_hd,
> acb->sector_num, acb->buf, acb->n, qcow_aio_read_cb, acb);n
> has been completed, the content which the acb->buf points to has not
> been prepared.This is a asynchronous read operation.Who could tell me
> the principle or process about this asynchronous read operation about
> these codes? if you describe it using the codes in xen,that will be so
> kind of you.I need to know when the data has been copied to the memory
> which the acb->buf points to, and this problem is important to me.as
> the title mentioned ,I have to solve it as soon as possible.
>
> A newbie
For reference:
http://www.catb.org/esr/faqs/smart-questions.html#urgent
http://www.catb.org/esr/faqs/smart-questions.html#goal
It would probably help if you described what you are trying to solve.
(Please take some time to read the WHOLE of the above page, as you may
actually learn something useful, that will help you for the rest of your
life...)
I'm sure you are correct in that the buffer isn't (guaranteed to be)
filled in when the read function returns (it is also not guaranteed that
it's NOT filled in - if the read preceeding this call asked for the
section of disk immediately preceeding where this request is for, you
may well end up with the data already available, and thus the buffer is
filled in immediately).
If you read about asynchronous IO, for example here:
http://www.kernel.org/doc/man-pages/online/pages/man7/aio.7.html
there are functions, such as aio_suspend, which are called to "wait for
IO to complete".
I'm not familiar with this particular piece of code, so I don't know
where the aio_suspend (or whatever similar function it uses) gets
called, but I'm pretty sure that's how it works.
--
Mats
next prev parent reply other threads:[~2012-12-19 10:28 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-12-19 8:24 !!!!!help!I wouldn't be able to meet the deadline!(about read operation in qemu-img-xen) hxkhust
2012-12-19 10:28 ` Mats Petersson [this message]
-- strict thread matches above, loose matches on Subject: below --
2012-12-19 8:22 hxkhust
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=50D196CD.6080706@citrix.com \
--to=mats.petersson@citrix.com \
--cc=xen-devel@lists.xen.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.