summaryrefslogtreecommitdiff
path: root/include/linux/pagevec.h
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2017-09-07 02:21:21 +0300
committerLinus Torvalds <torvalds@linux-foundation.org>2017-09-07 03:27:26 +0300
commitb947cee4b96306037e166ff1ea5156c0ecdd7d91 (patch)
tree1a6791039e7d4b5a822445598b94aa71162dd65a /include/linux/pagevec.h
parentd72dc8a25afc71ce90ee92bdd77550e9beb85d4d (diff)
downloadlinux-b947cee4b96306037e166ff1ea5156c0ecdd7d91.tar.xz
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/pagevec.h')
-rw-r--r--include/linux/pagevec.h13
1 files changed, 11 insertions, 2 deletions
diff --git a/include/linux/pagevec.h b/include/linux/pagevec.h
index c395a5bb58b2..7df056910437 100644
--- a/include/linux/pagevec.h
+++ b/include/linux/pagevec.h
@@ -27,8 +27,17 @@ unsigned pagevec_lookup_entries(struct pagevec *pvec,
pgoff_t start, unsigned nr_entries,
pgoff_t *indices);
void pagevec_remove_exceptionals(struct pagevec *pvec);
-unsigned pagevec_lookup(struct pagevec *pvec, struct address_space *mapping,
- pgoff_t *start, unsigned nr_pages);
+unsigned pagevec_lookup_range(struct pagevec *pvec,
+ struct address_space *mapping,
+ pgoff_t *start, pgoff_t end, unsigned nr_pages);
+static inline unsigned pagevec_lookup(struct pagevec *pvec,
+ struct address_space *mapping,
+ pgoff_t *start, unsigned nr_pages)
+{
+ return pagevec_lookup_range(pvec, mapping, start, (pgoff_t)-1,
+ nr_pages);
+}
+
unsigned pagevec_lookup_tag(struct pagevec *pvec,
struct address_space *mapping, pgoff_t *index, int tag,
unsigned nr_pages);