summaryrefslogtreecommitdiffstats
path: root/mm/readahead.c
diff options
context:
space:
mode:
authorFengguang Wu2007-07-19 10:47:59 +0200
committerLinus Torvalds2007-07-19 19:04:44 +0200
commit5ce1110b92b31d079aa443e967f43a2294e01194 (patch)
treeeff95b4c8ede07d0777ca68a30d686d1acbb5c73 /mm/readahead.c
parentreadahead: MIN_RA_PAGES/MAX_RA_PAGES macros (diff)
downloadkernel-qcow2-linux-5ce1110b92b31d079aa443e967f43a2294e01194.tar.gz
kernel-qcow2-linux-5ce1110b92b31d079aa443e967f43a2294e01194.tar.xz
kernel-qcow2-linux-5ce1110b92b31d079aa443e967f43a2294e01194.zip
readahead: data structure and routines
Extend struct file_ra_state to support the on-demand readahead logic. Also define some helpers for it. Signed-off-by: Fengguang Wu <wfg@mail.ustc.edu.cn> Cc: Steven Pratt <slpratt@austin.ibm.com> Cc: Ram Pai <linuxram@us.ibm.com> Cc: Rusty Russell <rusty@rustcorp.com.au> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/readahead.c')
-rw-r--r--mm/readahead.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/mm/readahead.c b/mm/readahead.c
index 7f9bf588c936..072ce8f8357d 100644
--- a/mm/readahead.c
+++ b/mm/readahead.c
@@ -592,3 +592,22 @@ unsigned long max_sane_readahead(unsigned long nr)
return min(nr, (node_page_state(numa_node_id(), NR_INACTIVE)
+ node_page_state(numa_node_id(), NR_FREE_PAGES)) / 2);
}
+
+/*
+ * Submit IO for the read-ahead request in file_ra_state.
+ */
+unsigned long ra_submit(struct file_ra_state *ra,
+ struct address_space *mapping, struct file *filp)
+{
+ unsigned long ra_size;
+ unsigned long la_size;
+ int actual;
+
+ ra_size = ra_readahead_size(ra);
+ la_size = ra_lookahead_size(ra);
+ actual = __do_page_cache_readahead(mapping, filp,
+ ra->ra_index, ra_size, la_size);
+
+ return actual;
+}
+EXPORT_SYMBOL_GPL(ra_submit);