Patch "xfs: Move handling of missing page into one place in xfs_find_get_desired_pgoff()" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
xfs: Move handling of missing page into one place in xfs_find_get_desired_pgoff()
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
xfs-move-handling-of-missing-page-into-one-place-in-xfs_find_get_desired_pgoff.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
a54fba8f5a0dc36161cacdf2aa90f007f702ec1aMon Sep 17 00:00:00 2001
From: Jan Kara <[email protected]>
Date: Thu, 18 May 2017 16:36:24 -0700
Subject: xfs: Move handling of missing page into one place in xfs_find_get_desired_pgoff()
From: Jan Kara <[email protected]>
commit a54fba8f5a0dc36161cacdf2aa90f007f702ec1a upstream.
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.
--- fs/xfs/xfs_file.c | 38 ++++++++------------------------------ 1 file changed, 8 insertions(+), 30 deletions(-)
fs/xfs/xfs_file.c +8 -30
@@ -1139,29 +1139,8 @@ xfs_find_get_desired_pgoff( want =min_t (pgoff_t, end - index,PAGEVEC_SIZE -1 ) +1 ; nr_pages =pagevec_lookup (&pvec, inode->i_mapping, index, want); -/* -* 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; - } +if (nr_pages ==0 )break ; - }for (i =0 ; i < nr_pages; i++) {struct page *page = pvec.pages[i];
@@ -1227,21 +1206,20 @@ xfs_find_get_desired_pgoff(/* * The number of returned pages less than our desired, search -* done. In this case, nothing was found for searching data, -* but we found a hole behind the last offset. +* done. */ -if (nr_pages < want) { -if (type ==HOLE_OFF ) { - *offset = lastoff; - found = true; - } +if (nr_pages < want)break ; - } index = pvec.pages[i -1 ]->index +1 ;pagevec_release (&pvec); }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:pagevec_release (&pvec);return found;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/xfs-move-handling-of-missing-page-into-one-place-in-xfs_find_get_desired_pgoff.patch