From: Gu Zheng <guz.fnst@cn.fujitsu.com>
To: Kent Overstreet <kmo@daterainc.com>
Cc: Benjamin <bcrl@kvack.org>, Jens <axboe@kernel.dk>,
linux-aio@kvack.org, linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 2/2] aio: make aio_read_events_ring be aware of aio_complete
Date: Mon, 03 Mar 2014 10:17:40 +0800 [thread overview]
Message-ID: <5313E644.5040409@cn.fujitsu.com> (raw)
In-Reply-To: <20140228205243.GA7325@kmo-pixel>
Hi Kent,
Sorry for late replay.
On 03/01/2014 04:52 AM, Kent Overstreet wrote:
> On Fri, Feb 28, 2014 at 06:27:18PM +0800, Gu Zheng wrote:
>> Commit 5ffac122dbda8(aio: Don't use ctx->tail unnecessarily) uses
>> ring->tail rather than the ctx->tail, but with this change, we fetch 'tail'
>> only once at the start, so that we can not be aware of adding event by aio_complete
>> when reading events. It seems a regression.
>
> "Seems a regression" is not good enough. What breaks?
Previously without the commit 5ffac122dbda8, we used tail from aio context to judge
whether the ring buffer has events(have not been read) each time, as following:
avail = (head <= ctx->tail ? ctx->tail : ctx->nr_events) - head;
so that we can be aware of new events that added by aio_complete when we are reading the
current ones, and we can read the new added events together.
E.g. we want to read 10 events, only 8 events now, add 2 events added while we copying
current 8 events to userspace, and we can read the 2 new events in the next circle.
But with the commit 5ffac122dbda8, we fetch tail from ring buffer only once when we start
to read events, so that we can not be aware of events that added by aio_complete while we
are reading current events(e.g. copy currents events to user space). Such as the case
mentioned above can only read 8 events, though these are 2 new events in the ring buffer.
Is not it a regression, or am I missing something?
Regards,
Gu
>
>> So here we fetch the ring->tail in start of the loop each time to make it be
>> aware of adding event from aio_complete.
>>
>> Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com>
>> ---
>> fs/aio.c | 6 +++++-
>> 1 files changed, 5 insertions(+), 1 deletions(-)
>>
>> diff --git a/fs/aio.c b/fs/aio.c
>> index 7eaa631..f5b8551 100644
>> --- a/fs/aio.c
>> +++ b/fs/aio.c
>> @@ -1029,10 +1029,14 @@ static long aio_read_events_ring(struct kioctx *ctx,
>> struct io_event *ev;
>> struct page *page;
>>
>> - avail = (head <= tail ? tail : ctx->nr_events) - head;
>> + ring = kmap_atomic(ctx->ring_pages[0]);
>> + tail = ring->tail;
>> + kunmap_atomic(ring);
>> +
>> if (head == tail)
>> break;
>>
>> + avail = (head <= tail ? tail : ctx->nr_events) - head;
>> avail = min(avail, nr - ret);
>> avail = min_t(long, avail, AIO_EVENTS_PER_PAGE -
>> ((head + AIO_EVENTS_OFFSET) % AIO_EVENTS_PER_PAGE));
>> --
>> 1.7.7
>>
>
next prev parent reply other threads:[~2014-03-03 2:26 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-28 10:27 [PATCH 2/2] aio: make aio_read_events_ring be aware of aio_complete Gu Zheng
2014-02-28 20:52 ` Kent Overstreet
2014-03-03 2:17 ` Gu Zheng [this message]
2014-03-07 10:42 ` Gu Zheng
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=5313E644.5040409@cn.fujitsu.com \
--to=guz.fnst@cn.fujitsu.com \
--cc=axboe@kernel.dk \
--cc=bcrl@kvack.org \
--cc=kmo@daterainc.com \
--cc=linux-aio@kvack.org \
--cc=linux-kernel@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox