aboutsummaryrefslogtreecommitdiff
path: root/mm/readahead.c
diff options
context:
space:
mode:
authorhellsgod <hellsgod@gmx.ch>2013-09-16 17:39:52 +0200
committerMister Oyster <oysterized@gmail.com>2017-12-26 13:06:59 +0100
commitb258591718be6cb32b1f0b14180e75dad56897e0 (patch)
tree550f2b2223f0ec8d8a41acf8e63b8b944b412013 /mm/readahead.c
parenta4004def3f9f4159d8ea05d0802e1ce7f4fde4d5 (diff)
Readahead: Optimize divide/multiply by power of 2 using L/R shift (thx ramgear)
Signed-off-by: Joe Maples <joe@frap129.org>
Diffstat (limited to 'mm/readahead.c')
-rw-r--r--mm/readahead.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/mm/readahead.c b/mm/readahead.c
index 15d44735b..6929d473d 100644
--- a/mm/readahead.c
+++ b/mm/readahead.c
@@ -222,7 +222,7 @@ int force_page_cache_readahead(struct address_space *mapping, struct file *filp,
while (nr_to_read) {
int err;
- unsigned long this_chunk = (2 * 1024 * 1024) / PAGE_CACHE_SIZE;
+ unsigned long this_chunk = (2097152) >> PAGE_CACHE_SHIFT;
if (this_chunk > nr_to_read)
this_chunk = nr_to_read;
@@ -246,7 +246,7 @@ int force_page_cache_readahead(struct address_space *mapping, struct file *filp,
unsigned long max_sane_readahead(unsigned long nr)
{
return min(nr, (node_page_state(numa_node_id(), NR_INACTIVE_FILE)
- + node_page_state(numa_node_id(), NR_FREE_PAGES)) / 2);
+ + node_page_state(numa_node_id(), NR_FREE_PAGES)) >> 1);
}
/*
@@ -259,10 +259,10 @@ static unsigned long get_init_ra_size(unsigned long size, unsigned long max)
{
unsigned long newsize = roundup_pow_of_two(size);
- if (newsize <= max / 32)
- newsize = newsize * 4;
- else if (newsize <= max / 4)
- newsize = newsize * 2;
+ if (newsize <= (max >> 5))
+ newsize = newsize << 2;
+ else if (newsize <= (max >> 2))
+ newsize = newsize << 1;
else
newsize = max;
@@ -279,10 +279,10 @@ static unsigned long get_next_ra_size(struct file_ra_state *ra,
unsigned long cur = ra->size;
unsigned long newsize;
- if (cur < max / 16)
- newsize = 4 * cur;
+ if (cur < (max >> 4))
+ newsize = cur >> 2;
else
- newsize = 2 * cur;
+ newsize = cur >> 1;
return min(newsize, max);
}
@@ -370,7 +370,7 @@ static int try_context_readahead(struct address_space *mapping,
* it is a strong indication of long-run stream (or whole-file-read)
*/
if (size >= offset)
- size *= 2;
+ size <<= 1;
ra->start = offset;
ra->size = min(size + req_size, max);