Commit dec0da7b authored by Jan Kara's avatar Jan Kara Committed by Linus Torvalds

ext4: use pagevec_lookup_range() in ext4_find_unwritten_pgoff()

Use pagevec_lookup_range() in ext4_find_unwritten_pgoff() since we are
interested only in pages in the given range.  Simplify the logic as a
result of not getting pages out of range and index getting automatically
advanced.

Link: http://lkml.kernel.org/r/20170726114704.7626-6-jack@suse.czSigned-off-by: default avatarJan Kara <jack@suse.cz>
Cc: "Theodore Ts'o" <tytso@mit.edu>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent c10f778d
...@@ -464,12 +464,11 @@ static int ext4_find_unwritten_pgoff(struct inode *inode, ...@@ -464,12 +464,11 @@ static int ext4_find_unwritten_pgoff(struct inode *inode,
pagevec_init(&pvec, 0); pagevec_init(&pvec, 0);
do { do {
int i, num; int i;
unsigned long nr_pages; unsigned long nr_pages;
num = min_t(pgoff_t, end - index, PAGEVEC_SIZE - 1) + 1; nr_pages = pagevec_lookup_range(&pvec, inode->i_mapping,
nr_pages = pagevec_lookup(&pvec, inode->i_mapping, &index, &index, end, PAGEVEC_SIZE);
(pgoff_t)num);
if (nr_pages == 0) if (nr_pages == 0)
break; break;
...@@ -488,9 +487,6 @@ static int ext4_find_unwritten_pgoff(struct inode *inode, ...@@ -488,9 +487,6 @@ static int ext4_find_unwritten_pgoff(struct inode *inode,
goto out; goto out;
} }
if (page->index > end)
goto out;
lock_page(page); lock_page(page);
if (unlikely(page->mapping != inode->i_mapping)) { if (unlikely(page->mapping != inode->i_mapping)) {
...@@ -533,12 +529,10 @@ static int ext4_find_unwritten_pgoff(struct inode *inode, ...@@ -533,12 +529,10 @@ static int ext4_find_unwritten_pgoff(struct inode *inode,
unlock_page(page); unlock_page(page);
} }
/* The no. of pages is less than our desired, we are done. */
if (nr_pages < num)
break;
pagevec_release(&pvec); pagevec_release(&pvec);
} while (index <= end); } while (index <= end);
/* There are no pages upto endoff - that would be a hole in there. */
if (whence == SEEK_HOLE && lastoff < endoff) { if (whence == SEEK_HOLE && lastoff < endoff) {
found = 1; found = 1;
*offset = lastoff; *offset = lastoff;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment