mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-04-09 16:04:01 +00:00
xfs: Move handling of missing page into one place in xfs_find_get_desired_pgoff()
Currently several places in xfs_find_get_desired_pgoff() handle the case of a missing page. Make them all handled in one place after the loop has terminated. Signed-off-by: Jan Kara <jack@suse.cz> Reviewed-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:
parent
d7fd24257a
commit
a54fba8f5a
1 changed files with 8 additions and 30 deletions
|
@ -1052,29 +1052,8 @@ xfs_find_get_desired_pgoff(
|
||||||
want = min_t(pgoff_t, end - index, PAGEVEC_SIZE - 1) + 1;
|
want = min_t(pgoff_t, end - index, PAGEVEC_SIZE - 1) + 1;
|
||||||
nr_pages = pagevec_lookup(&pvec, inode->i_mapping, index,
|
nr_pages = pagevec_lookup(&pvec, inode->i_mapping, index,
|
||||||
want);
|
want);
|
||||||
/*
|
if (nr_pages == 0)
|
||||||
* No page mapped into given range. If we are searching holes
|
|
||||||
* and if this is the first time we got into the loop, it means
|
|
||||||
* that the given offset is landed in a hole, return it.
|
|
||||||
*
|
|
||||||
* If we have already stepped through some block buffers to find
|
|
||||||
* holes but they all contains data. In this case, the last
|
|
||||||
* offset is already updated and pointed to the end of the last
|
|
||||||
* mapped page, if it does not reach the endpoint to search,
|
|
||||||
* that means there should be a hole between them.
|
|
||||||
*/
|
|
||||||
if (nr_pages == 0) {
|
|
||||||
/* Data search found nothing */
|
|
||||||
if (type == DATA_OFF)
|
|
||||||
break;
|
|
||||||
|
|
||||||
ASSERT(type == HOLE_OFF);
|
|
||||||
if (lastoff == startoff || lastoff < endoff) {
|
|
||||||
found = true;
|
|
||||||
*offset = lastoff;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < nr_pages; i++) {
|
for (i = 0; i < nr_pages; i++) {
|
||||||
struct page *page = pvec.pages[i];
|
struct page *page = pvec.pages[i];
|
||||||
|
@ -1140,21 +1119,20 @@ xfs_find_get_desired_pgoff(
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The number of returned pages less than our desired, search
|
* The number of returned pages less than our desired, search
|
||||||
* done. In this case, nothing was found for searching data,
|
* done.
|
||||||
* but we found a hole behind the last offset.
|
|
||||||
*/
|
*/
|
||||||
if (nr_pages < want) {
|
if (nr_pages < want)
|
||||||
if (type == HOLE_OFF) {
|
|
||||||
*offset = lastoff;
|
|
||||||
found = true;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
index = pvec.pages[i - 1]->index + 1;
|
index = pvec.pages[i - 1]->index + 1;
|
||||||
pagevec_release(&pvec);
|
pagevec_release(&pvec);
|
||||||
} while (index <= end);
|
} while (index <= end);
|
||||||
|
|
||||||
|
/* No page at lastoff and we are not done - we found a hole. */
|
||||||
|
if (type == HOLE_OFF && lastoff < endoff) {
|
||||||
|
*offset = lastoff;
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
out:
|
out:
|
||||||
pagevec_release(&pvec);
|
pagevec_release(&pvec);
|
||||||
return found;
|
return found;
|
||||||
|
|
Loading…
Add table
Reference in a new issue