aboutsummaryrefslogtreecommitdiffstats
path: root/mm/filemap.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/filemap.c')
-rw-r--r--mm/filemap.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/mm/filemap.c b/mm/filemap.c
index 54d5318f8d3f..1efd2994dccf 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -2144,11 +2144,6 @@ void filemap_map_pages(struct fault_env *fe,
2144 start_pgoff) { 2144 start_pgoff) {
2145 if (iter.index > end_pgoff) 2145 if (iter.index > end_pgoff)
2146 break; 2146 break;
2147 fe->pte += iter.index - last_pgoff;
2148 fe->address += (iter.index - last_pgoff) << PAGE_SHIFT;
2149 last_pgoff = iter.index;
2150 if (!pte_none(*fe->pte))
2151 goto next;
2152repeat: 2147repeat:
2153 page = radix_tree_deref_slot(slot); 2148 page = radix_tree_deref_slot(slot);
2154 if (unlikely(!page)) 2149 if (unlikely(!page))
@@ -2186,7 +2181,13 @@ repeat:
2186 2181
2187 if (file->f_ra.mmap_miss > 0) 2182 if (file->f_ra.mmap_miss > 0)
2188 file->f_ra.mmap_miss--; 2183 file->f_ra.mmap_miss--;
2189 do_set_pte(fe, page); 2184
2185 fe->address += (iter.index - last_pgoff) << PAGE_SHIFT;
2186 if (fe->pte)
2187 fe->pte += iter.index - last_pgoff;
2188 last_pgoff = iter.index;
2189 if (alloc_set_pte(fe, NULL, page))
2190 goto unlock;
2190 unlock_page(page); 2191 unlock_page(page);
2191 goto next; 2192 goto next;
2192unlock: 2193unlock:
@@ -2194,6 +2195,9 @@ unlock:
2194skip: 2195skip:
2195 put_page(page); 2196 put_page(page);
2196next: 2197next:
2198 /* Huge page is mapped? No need to proceed. */
2199 if (pmd_trans_huge(*fe->pmd))
2200 break;
2197 if (iter.index == end_pgoff) 2201 if (iter.index == end_pgoff)
2198 break; 2202 break;
2199 } 2203 }