Commit 6ce745ed authored by Jan Kara's avatar Jan Kara Committed by Linus Torvalds

readahead: code cleanup

Rename file_ra_state.prev_page to prev_index and file_ra_state.offset to
prev_offset.  Also update of prev_index in do_generic_mapping_read() is now
moved close to the update of prev_offset.

[wfg@mail.ustc.edu.cn: fix it]
Signed-off-by: default avatarJan Kara <jack@suse.cz>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Cc: WU Fengguang <wfg@mail.ustc.edu.cn>
Signed-off-by: default avatarFengguang Wu <wfg@mail.ustc.edu.cn>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent ec0f1637
...@@ -696,13 +696,13 @@ struct file_ra_state { ...@@ -696,13 +696,13 @@ struct file_ra_state {
unsigned long size; unsigned long size;
unsigned long flags; /* ra flags RA_FLAG_xxx*/ unsigned long flags; /* ra flags RA_FLAG_xxx*/
unsigned long cache_hit; /* cache hit count*/ unsigned long cache_hit; /* cache hit count*/
unsigned long prev_page; /* Cache last read() position */ unsigned long prev_index; /* Cache last read() position */
unsigned long ahead_start; /* Ahead window */ unsigned long ahead_start; /* Ahead window */
unsigned long ahead_size; unsigned long ahead_size;
unsigned long ra_pages; /* Maximum readahead window */ unsigned long ra_pages; /* Maximum readahead window */
unsigned long mmap_hit; /* Cache hit stat for mmap accesses */ unsigned long mmap_hit; /* Cache hit stat for mmap accesses */
unsigned long mmap_miss; /* Cache miss stat for mmap accesses */ unsigned long mmap_miss; /* Cache miss stat for mmap accesses */
unsigned int offset; /* Offset where last read() ended in a page */ unsigned int prev_offset; /* Offset where last read() ended in a page */
}; };
#define RA_FLAG_MISS 0x01 /* a cache miss occured against this file */ #define RA_FLAG_MISS 0x01 /* a cache miss occured against this file */
#define RA_FLAG_INCACHE 0x02 /* file is already in cache */ #define RA_FLAG_INCACHE 0x02 /* file is already in cache */
......
...@@ -877,8 +877,8 @@ void do_generic_mapping_read(struct address_space *mapping, ...@@ -877,8 +877,8 @@ void do_generic_mapping_read(struct address_space *mapping,
cached_page = NULL; cached_page = NULL;
index = *ppos >> PAGE_CACHE_SHIFT; index = *ppos >> PAGE_CACHE_SHIFT;
next_index = index; next_index = index;
prev_index = ra.prev_page; prev_index = ra.prev_index;
prev_offset = ra.offset; prev_offset = ra.prev_offset;
last_index = (*ppos + desc->count + PAGE_CACHE_SIZE-1) >> PAGE_CACHE_SHIFT; last_index = (*ppos + desc->count + PAGE_CACHE_SIZE-1) >> PAGE_CACHE_SHIFT;
offset = *ppos & ~PAGE_CACHE_MASK; offset = *ppos & ~PAGE_CACHE_MASK;
...@@ -947,7 +947,8 @@ void do_generic_mapping_read(struct address_space *mapping, ...@@ -947,7 +947,8 @@ void do_generic_mapping_read(struct address_space *mapping,
offset += ret; offset += ret;
index += offset >> PAGE_CACHE_SHIFT; index += offset >> PAGE_CACHE_SHIFT;
offset &= ~PAGE_CACHE_MASK; offset &= ~PAGE_CACHE_MASK;
prev_offset = ra.offset = offset; prev_offset = offset;
ra.prev_offset = offset;
page_cache_release(page); page_cache_release(page);
if (ret == nr && desc->count) if (ret == nr && desc->count)
......
...@@ -37,7 +37,7 @@ void ...@@ -37,7 +37,7 @@ void
file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping) file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping)
{ {
ra->ra_pages = mapping->backing_dev_info->ra_pages; ra->ra_pages = mapping->backing_dev_info->ra_pages;
ra->prev_page = -1; ra->prev_index = -1;
} }
EXPORT_SYMBOL_GPL(file_ra_state_init); EXPORT_SYMBOL_GPL(file_ra_state_init);
...@@ -202,19 +202,19 @@ static int read_pages(struct address_space *mapping, struct file *filp, ...@@ -202,19 +202,19 @@ static int read_pages(struct address_space *mapping, struct file *filp,
* size: Number of pages in that read * size: Number of pages in that read
* Together, these form the "current window". * Together, these form the "current window".
* Together, start and size represent the `readahead window'. * Together, start and size represent the `readahead window'.
* prev_page: The page which the readahead algorithm most-recently inspected. * prev_index: The page which the readahead algorithm most-recently inspected.
* It is mainly used to detect sequential file reading. * It is mainly used to detect sequential file reading.
* If page_cache_readahead sees that it is again being called for * If page_cache_readahead sees that it is again being called for
* a page which it just looked at, it can return immediately without * a page which it just looked at, it can return immediately without
* making any state changes. * making any state changes.
* offset: Offset in the prev_page where the last read ended - used for * offset: Offset in the prev_index where the last read ended - used for
* detection of sequential file reading. * detection of sequential file reading.
* ahead_start, * ahead_start,
* ahead_size: Together, these form the "ahead window". * ahead_size: Together, these form the "ahead window".
* ra_pages: The externally controlled max readahead for this fd. * ra_pages: The externally controlled max readahead for this fd.
* *
* When readahead is in the off state (size == 0), readahead is disabled. * When readahead is in the off state (size == 0), readahead is disabled.
* In this state, prev_page is used to detect the resumption of sequential I/O. * In this state, prev_index is used to detect the resumption of sequential I/O.
* *
* The readahead code manages two windows - the "current" and the "ahead" * The readahead code manages two windows - the "current" and the "ahead"
* windows. The intent is that while the application is walking the pages * windows. The intent is that while the application is walking the pages
...@@ -417,7 +417,7 @@ static int make_ahead_window(struct address_space *mapping, struct file *filp, ...@@ -417,7 +417,7 @@ static int make_ahead_window(struct address_space *mapping, struct file *filp,
ra->ahead_size = get_next_ra_size(ra); ra->ahead_size = get_next_ra_size(ra);
ra->ahead_start = ra->start + ra->size; ra->ahead_start = ra->start + ra->size;
block = force || (ra->prev_page >= ra->ahead_start); block = force || (ra->prev_index >= ra->ahead_start);
ret = blockable_page_cache_readahead(mapping, filp, ret = blockable_page_cache_readahead(mapping, filp,
ra->ahead_start, ra->ahead_size, ra, block); ra->ahead_start, ra->ahead_size, ra, block);
...@@ -469,13 +469,13 @@ page_cache_readahead(struct address_space *mapping, struct file_ra_state *ra, ...@@ -469,13 +469,13 @@ page_cache_readahead(struct address_space *mapping, struct file_ra_state *ra,
* We avoid doing extra work and bogusly perturbing the readahead * We avoid doing extra work and bogusly perturbing the readahead
* window expansion logic. * window expansion logic.
*/ */
if (offset == ra->prev_page && --req_size) if (offset == ra->prev_index && --req_size)
++offset; ++offset;
/* Note that prev_page == -1 if it is a first read */ /* Note that prev_index == -1 if it is a first read */
sequential = (offset == ra->prev_page + 1); sequential = (offset == ra->prev_index + 1);
ra->prev_page = offset; ra->prev_index = offset;
ra->offset = 0; ra->prev_offset = 0;
max = get_max_readahead(ra); max = get_max_readahead(ra);
newsize = min(req_size, max); newsize = min(req_size, max);
...@@ -484,7 +484,7 @@ page_cache_readahead(struct address_space *mapping, struct file_ra_state *ra, ...@@ -484,7 +484,7 @@ page_cache_readahead(struct address_space *mapping, struct file_ra_state *ra,
if (newsize == 0 || (ra->flags & RA_FLAG_INCACHE)) if (newsize == 0 || (ra->flags & RA_FLAG_INCACHE))
goto out; goto out;
ra->prev_page += newsize - 1; ra->prev_index += newsize - 1;
/* /*
* Special case - first read at start of file. We'll assume it's * Special case - first read at start of file. We'll assume it's
...@@ -540,18 +540,18 @@ page_cache_readahead(struct address_space *mapping, struct file_ra_state *ra, ...@@ -540,18 +540,18 @@ page_cache_readahead(struct address_space *mapping, struct file_ra_state *ra,
* we get called back on the first page of the ahead window which * we get called back on the first page of the ahead window which
* will allow us to submit more IO. * will allow us to submit more IO.
*/ */
if (ra->prev_page >= ra->ahead_start) { if (ra->prev_index >= ra->ahead_start) {
ra->start = ra->ahead_start; ra->start = ra->ahead_start;
ra->size = ra->ahead_size; ra->size = ra->ahead_size;
make_ahead_window(mapping, filp, ra, 0); make_ahead_window(mapping, filp, ra, 0);
recheck: recheck:
/* prev_page shouldn't overrun the ahead window */ /* prev_index shouldn't overrun the ahead window */
ra->prev_page = min(ra->prev_page, ra->prev_index = min(ra->prev_index,
ra->ahead_start + ra->ahead_size - 1); ra->ahead_start + ra->ahead_size - 1);
} }
out: out:
return ra->prev_page + 1; return ra->prev_index + 1;
} }
EXPORT_SYMBOL_GPL(page_cache_readahead); EXPORT_SYMBOL_GPL(page_cache_readahead);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment