From: Fengguang Wu <wfg@mail.ustc.edu.cn>
To: Andrew Morton <akpm@osdl.org>
Cc: linux-kernel@vger.kernel.org, Nick Piggin <nickpiggin@yahoo.com.au>
Subject: [PATCH 06/10] readahead: remove the local copy of ra in do_generic_mapping_read()
Date: Tue, 24 Jul 2007 10:00:15 +0800 [thread overview]
Message-ID: <385243123.22470@ustc.edu.cn> (raw)
Message-ID: <20070724020042.588573597@mail.ustc.edu.cn> (raw)
In-Reply-To: 20070724020009.677809022@mail.ustc.edu.cn
[-- Attachment #1: remove-duplicate-ra.patch --]
[-- Type: text/plain, Size: 2542 bytes --]
The local copy of ra in do_generic_mapping_read() can now go away.
It predates readanead(req_size). In a time when the readahead code was called
on *every* single page. Hence a local has to be made to reduce the chance of
the readahead state being overwritten by a concurrent reader. More details in:
Linux: Random File I/O Regressions In 2.6 <http://kerneltrap.org/node/3039>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Signed-off-by: Fengguang Wu <wfg@mail.ustc.edu.cn>
---
mm/filemap.c | 20 +++++++++-----------
1 file changed, 9 insertions(+), 11 deletions(-)
--- linux-2.6.22-rc6-mm1.orig/mm/filemap.c
+++ linux-2.6.22-rc6-mm1/mm/filemap.c
@@ -863,7 +863,7 @@ static void shrink_readahead_size_eio(st
* It may be NULL.
*/
void do_generic_mapping_read(struct address_space *mapping,
- struct file_ra_state *_ra,
+ struct file_ra_state *ra,
struct file *filp,
loff_t *ppos,
read_descriptor_t *desc,
@@ -877,12 +877,11 @@ void do_generic_mapping_read(struct addr
unsigned long prev_index;
unsigned int prev_offset;
int error;
- struct file_ra_state ra = *_ra;
index = *ppos >> PAGE_CACHE_SHIFT;
next_index = index;
- prev_index = ra.prev_pos >> PAGE_CACHE_SHIFT;
- prev_offset = ra.prev_pos & (PAGE_CACHE_SIZE-1);
+ prev_index = ra->prev_pos >> PAGE_CACHE_SHIFT;
+ prev_offset = ra->prev_pos & (PAGE_CACHE_SIZE-1);
last_index = (*ppos + desc->count + PAGE_CACHE_SIZE-1) >> PAGE_CACHE_SHIFT;
offset = *ppos & ~PAGE_CACHE_MASK;
@@ -897,7 +896,7 @@ find_page:
page = find_get_page(mapping, index);
if (!page) {
page_cache_sync_readahead(mapping,
- &ra, filp,
+ ra, filp,
index, last_index - index);
page = find_get_page(mapping, index);
if (unlikely(page == NULL))
@@ -905,7 +904,7 @@ find_page:
}
if (PageReadahead(page)) {
page_cache_async_readahead(mapping,
- &ra, filp, page,
+ ra, filp, page,
index, last_index - index);
}
if (!PageUptodate(page))
@@ -1016,7 +1015,7 @@ readpage:
}
unlock_page(page);
error = -EIO;
- shrink_readahead_size_eio(filp, &ra);
+ shrink_readahead_size_eio(filp, ra);
goto readpage_error;
}
unlock_page(page);
@@ -1053,10 +1052,9 @@ no_cached_page:
}
out:
- *_ra = ra;
- _ra->prev_pos = prev_index;
- _ra->prev_pos <<= PAGE_CACHE_SHIFT;
- _ra->prev_pos |= prev_offset;
+ ra->prev_pos = prev_index;
+ ra->prev_pos <<= PAGE_CACHE_SHIFT;
+ ra->prev_pos |= prev_offset;
*ppos = ((loff_t) index << PAGE_CACHE_SHIFT) + offset;
if (filp)
--
next prev parent reply other threads:[~2007-07-24 2:13 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-24 2:00 [PATCH 00/10] readahead cleanups and interleaved readahead take 4 Fengguang Wu
2007-07-24 2:00 ` Fengguang Wu
2007-07-24 2:00 ` [PATCH 01/10] readahead: compacting file_ra_state Fengguang Wu
2007-07-24 2:00 ` Fengguang Wu
2007-07-24 2:00 ` [PATCH 02/10] readahead: mmap read-around simplification Fengguang Wu
2007-07-24 2:00 ` Fengguang Wu
2007-07-24 2:00 ` [PATCH 03/10] readahead: combine file_ra_state.prev_index/prev_offset into prev_pos Fengguang Wu
2007-07-24 2:00 ` Fengguang Wu
2007-07-24 3:52 ` Andrew Morton
2007-07-24 3:48 ` Fengguang Wu
2007-07-24 3:48 ` Fengguang Wu
2007-07-24 3:55 ` Andrew Morton
2007-07-24 4:32 ` Fengguang Wu
2007-07-24 4:32 ` Fengguang Wu
2007-07-24 4:53 ` Andrew Morton
2007-07-24 6:27 ` Fengguang Wu
2007-07-24 6:27 ` Fengguang Wu
2007-07-24 4:37 ` Fengguang Wu
2007-07-24 4:37 ` Fengguang Wu
2007-07-24 2:00 ` [PATCH 04/10] radixtree: introduce radix_tree_scan_hole() Fengguang Wu
2007-07-24 2:00 ` Fengguang Wu
2007-07-24 2:00 ` [PATCH 05/10] readahead: basic support of interleaved reads Fengguang Wu
2007-07-24 2:00 ` Fengguang Wu
2007-07-24 2:00 ` Fengguang Wu [this message]
2007-07-24 2:00 ` [PATCH 06/10] readahead: remove the local copy of ra in do_generic_mapping_read() Fengguang Wu
2007-07-24 2:00 ` [PATCH 07/10] readahead: remove several readahead macros Fengguang Wu
2007-07-24 2:00 ` Fengguang Wu
2007-07-24 2:00 ` [PATCH 08/10] readahead: remove the limit max_sectors_kb imposed on max_readahead_kb Fengguang Wu
2007-07-24 2:00 ` Fengguang Wu
2007-07-24 2:00 ` [PATCH 09/10] filemap: trivial code cleanups Fengguang Wu
2007-07-24 2:00 ` Fengguang Wu
2007-07-24 2:00 ` [PATCH 10/10] filemap: convert some unsigned long to pgoff_t Fengguang Wu
2007-07-24 2:00 ` Fengguang Wu
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=385243123.22470@ustc.edu.cn \
--to=wfg@mail.ustc.edu.cn \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nickpiggin@yahoo.com.au \
/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.