summaryrefslogtreecommitdiffstats
path: root/include/linux/pagemap.h
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2017-09-06 19:21:21 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-09-06 20:27:26 -0400
commitb947cee4b96306037e166ff1ea5156c0ecdd7d91 (patch)
tree1a6791039e7d4b5a822445598b94aa71162dd65a /include/linux/pagemap.h
parentd72dc8a25afc71ce90ee92bdd77550e9beb85d4d (diff)
mm: implement find_get_pages_range()
Implement a variant of find_get_pages() that stops iterating at given index. This may be substantial performance gain if the mapping is sparse. See following commit for details. Furthermore lots of users of this function (through pagevec_lookup()) actually want a range lookup and all of them are currently open-coding this. Also create corresponding pagevec_lookup_range() function. Link: http://lkml.kernel.org/r/20170726114704.7626-4-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>
Diffstat (limited to 'include/linux/pagemap.h')
-rw-r--r--include/linux/pagemap.h12
1 files changed, 10 insertions, 2 deletions
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index 249b1b5964c7..5bbd6780f205 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -353,8 +353,16 @@ struct page *find_lock_entry(struct address_space *mapping, pgoff_t offset);
353unsigned find_get_entries(struct address_space *mapping, pgoff_t start, 353unsigned find_get_entries(struct address_space *mapping, pgoff_t start,
354 unsigned int nr_entries, struct page **entries, 354 unsigned int nr_entries, struct page **entries,
355 pgoff_t *indices); 355 pgoff_t *indices);
356unsigned find_get_pages(struct address_space *mapping, pgoff_t *start, 356unsigned find_get_pages_range(struct address_space *mapping, pgoff_t *start,
357 unsigned int nr_pages, struct page **pages); 357 pgoff_t end, unsigned int nr_pages,
358 struct page **pages);
359static inline unsigned find_get_pages(struct address_space *mapping,
360 pgoff_t *start, unsigned int nr_pages,
361 struct page **pages)
362{
363 return find_get_pages_range(mapping, start, (pgoff_t)-1, nr_pages,
364 pages);
365}
358unsigned find_get_pages_contig(struct address_space *mapping, pgoff_t start, 366unsigned find_get_pages_contig(struct address_space *mapping, pgoff_t start,
359 unsigned int nr_pages, struct page **pages); 367 unsigned int nr_pages, struct page **pages);
360unsigned find_get_pages_tag(struct address_space *mapping, pgoff_t *index, 368unsigned find_get_pages_tag(struct address_space *mapping, pgoff_t *index,