2008-03-14 10:43:31

by Dave Young

[permalink] [raw]
Subject: [PATCH][BUG 10227] readahead ret value fix

If the page_offset > end_index, the return value should be updated to 0,
avoiding the redundant read_pages

Signed-off-by: Dave Young <[email protected]>

---
mm/readahead.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff -upr linux/mm/readahead.c linux.new/mm/readahead.c
--- linux/mm/readahead.c 2008-03-14 18:38:12.000000000 +0800
+++ linux.new/mm/readahead.c 2008-03-14 18:38:58.000000000 +0800
@@ -144,8 +144,10 @@ __do_page_cache_readahead(struct address
for (page_idx = 0; page_idx < nr_to_read; page_idx++) {
pgoff_t page_offset = offset + page_idx;

- if (page_offset > end_index)
+ if (page_offset > end_index) {
+ ret = 0;
break;
+ }

rcu_read_lock();
page = radix_tree_lookup(&mapping->page_tree, page_offset);


2008-03-14 11:08:23

by Dave Young

[permalink] [raw]
Subject: Re: [PATCH][BUG 10227] readahead ret value fix

On Fri, Mar 14, 2008 at 6:49 PM, Dave Young <[email protected]> wrote:
> If the page_offset > end_index, the return value should be updated to 0,
> avoiding the redundant read_pages
>
> Signed-off-by: Dave Young <[email protected]>
>
> ---
> mm/readahead.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff -upr linux/mm/readahead.c linux.new/mm/readahead.c
> --- linux/mm/readahead.c 2008-03-14 18:38:12.000000000 +0800
> +++ linux.new/mm/readahead.c 2008-03-14 18:38:58.000000000 +0800
> @@ -144,8 +144,10 @@ __do_page_cache_readahead(struct address
> for (page_idx = 0; page_idx < nr_to_read; page_idx++) {
> pgoff_t page_offset = offset + page_idx;
>
> - if (page_offset > end_index)
> + if (page_offset > end_index) {
> + ret = 0;
> break;
> + }
>
> rcu_read_lock();
> page = radix_tree_lookup(&mapping->page_tree, page_offset);
>

It's not right at all, sorry for the wrong quick patch.

Anyway, please see the following debug info of me
Mar 14 18:33:51 darkstar kernel: [ 19.073085] 3c59x: Donald Becker and others.
Mar 14 18:34:39 darkstar kernel: [ 117.837850] #0 page_offset : 0,
end_index : 2 ret: 0
Mar 14 18:34:39 darkstar kernel: [ 117.837854] #1 page_offset : 0,
end_index : 2
Mar 14 18:34:39 darkstar kernel: [ 117.837861] #0 page_offset : 1,
end_index : 2 ret: 1
Mar 14 18:34:39 darkstar kernel: [ 117.837873] #1 page_offset : 1,
end_index : 2
Mar 14 18:34:39 darkstar kernel: [ 117.837888] #0 page_offset : 2,
end_index : 2 ret: 2
Mar 14 18:34:39 darkstar kernel: [ 117.837911] #1 page_offset : 2,
end_index : 2
Mar 14 18:34:39 darkstar kernel: [ 117.837922] #0 page_offset : 3,
end_index : 2 ret: 3
Mar 14 18:34:40 darkstar kernel: [ 118.051620] #0 page_offset : 3,
end_index : 2 ret: 0
Mar 14 18:34:40 darkstar kernel: [ 118.051626] zisofs : req invalid

2008-03-14 11:50:25

by Wu Fengguang

[permalink] [raw]
Subject: Re: [PATCH][BUG 10227] readahead ret value fix

On Fri, Mar 14, 2008 at 06:49:06PM +0800, Dave Young wrote:
> If the page_offset > end_index, the return value should be updated to 0,
> avoiding the redundant read_pages

No, we don't need to fix it, hehe.
It's really trivial overhead.

The principle is to not add dispensable code :-)

Thank you,
Fengguang