aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Wilcox <willy@infradead.org>2019-03-05 15:44:08 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2019-03-05 21:07:16 -0800
commit14ef1fc72a3e86cea6498193c5e04b4619cb8622 (patch)
tree51dca5e31d99fc92626bfe7c3eebfb4543201554
parentmm/memcontrol.c: use struct_size() in kmalloc() (diff)
downloadlinux-dev-14ef1fc72a3e86cea6498193c5e04b4619cb8622.tar.xz
linux-dev-14ef1fc72a3e86cea6498193c5e04b4619cb8622.zip
mm/filemap.c: remove redundant test from find_get_pages_contig
After we establish a reference on the page, we check the pointer continues to be in the correct position in i_pages. Checking page->index afterwards is unnecessary; if it were to change, then the pointer to it from the page cache would also move. The check used to be done before grabbing a reference on the page which was racy (see commit 9cbb4cb21b19f ("mm: find_get_pages_contig fixlet")), but nobody noticed that moving the check after grabbing the reference was redundant. Link: http://lkml.kernel.org/r/20190107200224.13260-1-willy@infradead.org Signed-off-by: Matthew Wilcox <willy@infradead.org> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Cc: Hugh Dickins <hughd@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--mm/filemap.c10
1 files changed, 0 insertions, 10 deletions
diff --git a/mm/filemap.c b/mm/filemap.c
index 9f5e323e883e..935fbc29aeb1 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -1837,16 +1837,6 @@ unsigned find_get_pages_contig(struct address_space *mapping, pgoff_t index,
if (unlikely(page != xas_reload(&xas)))
goto put_page;
- /*
- * must check mapping and index after taking the ref.
- * otherwise we can get both false positives and false
- * negatives, which is just confusing to the caller.
- */
- if (!page->mapping || page_to_pgoff(page) != xas.xa_index) {
- put_page(page);
- break;
- }
-
pages[ret] = page;
if (++ret == nr_pages)
break;