[PATCH 31/35] shmem: Convert to pagevec_lookup_entries_range()
From: Jan Kara <jack@suse.cz>
Date: 2017-06-01 09:33:18
Also in:
ceph-devel, linux-btrfs, linux-ext4, linux-f2fs-devel, linux-xfs
Subsystem:
memory management, the rest, tmpfs (shmem filesystem) · Maintainers:
Andrew Morton, Linus Torvalds, Hugh Dickins
Convert radix tree scanners to use pagevec_lookup_entries_range() and find_get_entries_range() since they all want only entries from given range. CC: Hugh Dickins <hughd@google.com> Signed-off-by: Jan Kara <jack@suse.cz> --- mm/shmem.c | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-)
diff --git a/mm/shmem.c b/mm/shmem.c
index f9c4afbdd70c..e5ea044aae24 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c@@ -768,16 +768,12 @@ static void shmem_undo_range(struct inode *inode, loff_t lstart, loff_t lend, pagevec_init(&pvec, 0); index = start; while (index < end) { - if (!pagevec_lookup_entries(&pvec, mapping, &index, - min(end - index, (pgoff_t)PAGEVEC_SIZE), - indices)) + if (!pagevec_lookup_entries_range(&pvec, mapping, &index, + end - 1, PAGEVEC_SIZE, indices)) break; for (i = 0; i < pagevec_count(&pvec); i++) { struct page *page = pvec.pages[i]; - if (indices[i] >= end) - break; - if (radix_tree_exceptional_entry(page)) { if (unfalloc) continue;
@@ -860,9 +856,8 @@ static void shmem_undo_range(struct inode *inode, loff_t lstart, loff_t lend, cond_resched(); - if (!pagevec_lookup_entries(&pvec, mapping, &index, - min(end - index, (pgoff_t)PAGEVEC_SIZE), - indices)) { + if (!pagevec_lookup_entries_range(&pvec, mapping, &index, + end - 1, PAGEVEC_SIZE, indices)) { /* If all gone or hole-punch or unfalloc, we're done */ if (lookup_start == start || end != -1) break;
@@ -873,9 +868,6 @@ static void shmem_undo_range(struct inode *inode, loff_t lstart, loff_t lend, for (i = 0; i < pagevec_count(&pvec); i++) { struct page *page = pvec.pages[i]; - if (indices[i] >= end) - break; - if (radix_tree_exceptional_entry(page)) { if (unfalloc) continue;
@@ -2494,9 +2486,9 @@ static pgoff_t shmem_seek_hole_data(struct address_space *mapping, pagevec_init(&pvec, 0); pvec.nr = 1; /* start small: we may be there already */ - while (!done) { + while (!done && index < end) { last = index; - pvec.nr = find_get_entries(mapping, &index, + pvec.nr = find_get_entries_range(mapping, &index, end - 1, pvec.nr, pvec.pages, indices); if (!pvec.nr) { if (whence == SEEK_DATA)
@@ -2516,8 +2508,7 @@ static pgoff_t shmem_seek_hole_data(struct address_space *mapping, if (!PageUptodate(page)) page = NULL; } - if (last >= end || - (page && whence == SEEK_DATA) || + if ((page && whence == SEEK_DATA) || (!page && whence == SEEK_HOLE)) { done = true; break;
--
2.12.3
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>