|
@@ -1607,13 +1607,13 @@ int filemap_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
|
|
* Do we have something in the page cache already?
|
|
* Do we have something in the page cache already?
|
|
*/
|
|
*/
|
|
page = find_get_page(mapping, offset);
|
|
page = find_get_page(mapping, offset);
|
|
- if (likely(page)) {
|
|
|
|
|
|
+ if (likely(page) && !(vmf->flags & FAULT_FLAG_TRIED)) {
|
|
/*
|
|
/*
|
|
* We found the page, so try async readahead before
|
|
* We found the page, so try async readahead before
|
|
* waiting for the lock.
|
|
* waiting for the lock.
|
|
*/
|
|
*/
|
|
do_async_mmap_readahead(vma, ra, file, page, offset);
|
|
do_async_mmap_readahead(vma, ra, file, page, offset);
|
|
- } else {
|
|
|
|
|
|
+ } else if (!page) {
|
|
/* No page in the page cache at all */
|
|
/* No page in the page cache at all */
|
|
do_sync_mmap_readahead(vma, ra, file, offset);
|
|
do_sync_mmap_readahead(vma, ra, file, offset);
|
|
count_vm_event(PGMAJFAULT);
|
|
count_vm_event(PGMAJFAULT);
|