From: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
To: Matthew Wilcox <willy@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH] fat: Avoid oops when bdi->io_pages==0
Date: Sun, 30 Aug 2020 18:04:23 +0900 [thread overview]
Message-ID: <87zh6co67c.fsf@mail.parknet.co.jp> (raw)
In-Reply-To: <20200830035300.GX14765@casper.infradead.org> (Matthew Wilcox's message of "Sun, 30 Aug 2020 04:53:00 +0100")
Matthew Wilcox <willy@infradead.org> writes:
> On Sun, Aug 30, 2020 at 10:54:35AM +0900, OGAWA Hirofumi wrote:
>> Matthew Wilcox <willy@infradead.org> writes:
>>
>> Hm, io_pages is limited by driver setting too, and io_pages can be lower
>> than ra_pages, e.g. usb storage.
>>
>> Assuming ra_pages is user intent of readahead window. So if io_pages is
>> lower than ra_pages, this try ra_pages to align of io_pages chunk, but
>> not bigger than ra_pages. Because if block layer splits I/O requests to
>> hard limit, then I/O is not optimal.
>>
>> So it is intent, I can be misunderstanding though.
>
> Looking at this some more, I'm not sure it makes sense to consult ->io_pages
> at all. I see how it gets set to 0 -- the admin can write '1' to
> /sys/block/<device>/queue/max_sectors_kb and that gets turned into 0
> in ->io_pages.
if (max_sectors_kb > max_hw_sectors_kb || max_sectors_kb < page_kb)
return -EINVAL;
It should not set to 0 via /sys/.../max_sectors_kb. However the default
of bdi->io_pages is 0. So it happened if a driver didn't initialized it.
> But I'm not sure it makes any sense to respect that. Looking at
> mm/readahead.c, all it does is limit the size of a read request which
> exceeds the current readahead window. It's not used to limit the
> readahead window itself. For example:
>
> unsigned long max_pages = ra->ra_pages;
> ...
> if (req_size > max_pages && bdi->io_pages > max_pages)
> max_pages = min(req_size, bdi->io_pages);
>
> Setting io_pages below ra_pages has no effect. So maybe fat should also
> disregard it?
|-----------------------| requested blocks
[before]
ra_pages |===========|===========|===========|
io_pages |---------|---------|---------|
req |---------|-|-------|---|
[after]
ra_pages |=========|=========|=========|
io_pages |---------|---------|---------|
req |---------|---------|---|
This path is known the large sequential read there. Well, anyway, this
intent is to use [after] as 3 req, instead of [before] as 4 req.
Thanks.
--
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
next prev parent reply other threads:[~2020-08-30 9:04 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-30 0:59 [PATCH] fat: Avoid oops when bdi->io_pages==0 OGAWA Hirofumi
2020-08-30 1:21 ` Matthew Wilcox
2020-08-30 1:54 ` OGAWA Hirofumi
2020-08-30 3:53 ` Matthew Wilcox
2020-08-30 9:04 ` OGAWA Hirofumi [this message]
2020-08-30 14:01 ` Sasha Levin
2020-08-30 14:16 ` OGAWA Hirofumi
2020-08-31 15:22 ` Jens Axboe
2020-08-31 16:37 ` OGAWA Hirofumi
2020-08-31 16:39 ` Jens Axboe
2020-08-31 16:56 ` Matthew Wilcox
2020-08-31 17:00 ` Jens Axboe
2020-08-31 17:39 ` OGAWA Hirofumi
2020-08-31 17:16 ` OGAWA Hirofumi
2020-08-31 17:19 ` Jens Axboe
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=87zh6co67c.fsf@mail.parknet.co.jp \
--to=hirofumi@mail.parknet.co.jp \
--cc=akpm@linux-foundation.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=willy@infradead.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.