mm: use find_get_pages_range() in filemap_range_has_page()
authorJan Kara <jack@suse.cz>
Wed, 6 Sep 2017 23:21:40 +0000 (16:21 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 7 Sep 2017 00:27:27 +0000 (17:27 -0700)
We want only pages from given range in filemap_range_has_page(),
furthermore we want at most a single page.

So use find_get_pages_range() instead of pagevec_lookup() and remove
unnecessary code.

Link: http://lkml.kernel.org/r/20170726114704.7626-10-jack@suse.cz
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/filemap.c

index 129883f..84617a0 100644 (file)
@@ -393,8 +393,7 @@ bool filemap_range_has_page(struct address_space *mapping,
 {
        pgoff_t index = start_byte >> PAGE_SHIFT;
        pgoff_t end = end_byte >> PAGE_SHIFT;
-       struct pagevec pvec;
-       bool ret;
+       struct page *page;
 
        if (end_byte < start_byte)
                return false;
@@ -402,12 +401,10 @@ bool filemap_range_has_page(struct address_space *mapping,
        if (mapping->nrpages == 0)
                return false;
 
-       pagevec_init(&pvec, 0);
-       if (!pagevec_lookup(&pvec, mapping, &index, 1))
+       if (!find_get_pages_range(mapping, &index, end, 1, &page))
                return false;
-       ret = (pvec.pages[0]->index <= end);
-       pagevec_release(&pvec);
-       return ret;
+       put_page(page);
+       return true;
 }
 EXPORT_SYMBOL(filemap_range_has_page);