aboutsummaryrefslogtreecommitdiffstats
path: root/mm/filemap.c
diff options
context:
space:
mode:
authorYu Zhao <yuzhao@google.com>2019-03-05 18:49:17 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2019-03-06 00:07:20 -0500
commit5d3ee42f8f5fa5e7ccc8980878fe6e18a129b9ff (patch)
treef2450c2442939937da7fcb79282b14c0c6e96f55 /mm/filemap.c
parentafa00112893f4ca02777c3cf4f93011577af5ffc (diff)
mm/shmem: make find_get_pages_range() work for huge page
find_get_pages_range() and find_get_pages_range_tag() already correctly increment reference count on head when seeing compound page, but they may still use page index from tail. Page index from tail is always zero, so these functions don't work on huge shmem. This hasn't been a problem because, AFAIK, nobody calls these functions on (huge) shmem. Fix them anyway just in case. Link: http://lkml.kernel.org/r/20190110030838.84446-1-yuzhao@google.com Signed-off-by: Yu Zhao <yuzhao@google.com> Reviewed-by: William Kucharski <william.kucharski@oracle.com> Cc: Matthew Wilcox <willy@infradead.org> Cc: Amir Goldstein <amir73il@gmail.com> Cc: Dave Chinner <david@fromorbit.com> Cc: "Darrick J . Wong" <darrick.wong@oracle.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Souptick Joarder <jrdr.linux@gmail.com> Cc: Hugh Dickins <hughd@google.com> Cc: "Kirill A . Shutemov" <kirill.shutemov@linux.intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/filemap.c')
-rw-r--r--mm/filemap.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/mm/filemap.c b/mm/filemap.c
index ae0022f6106d..a41e01c472f3 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -1789,7 +1789,7 @@ unsigned find_get_pages_range(struct address_space *mapping, pgoff_t *start,
1789 1789
1790 pages[ret] = page; 1790 pages[ret] = page;
1791 if (++ret == nr_pages) { 1791 if (++ret == nr_pages) {
1792 *start = page->index + 1; 1792 *start = xas.xa_index + 1;
1793 goto out; 1793 goto out;
1794 } 1794 }
1795 continue; 1795 continue;
@@ -1927,7 +1927,7 @@ unsigned find_get_pages_range_tag(struct address_space *mapping, pgoff_t *index,
1927 1927
1928 pages[ret] = page; 1928 pages[ret] = page;
1929 if (++ret == nr_pages) { 1929 if (++ret == nr_pages) {
1930 *index = page->index + 1; 1930 *index = xas.xa_index + 1;
1931 goto out; 1931 goto out;
1932 } 1932 }
1933 continue; 1933 continue;