aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBart Van Assche <[email protected]>2016-10-07 16:58:33 -0700
committerLinus Torvalds <[email protected]>2016-10-07 18:46:27 -0700
commitc4b209a426847b55c40360c1d04dc7986b55ddc7 (patch)
tree4b314ec370fa682299fce807a74ce00f22cdc8bf
parent9300d8dfd282bd1473395c5c4c76bfdc90b05978 (diff)
do_generic_file_read(): fail immediately if killed
If a fatal signal has been received, fail immediately instead of trying to read more data. If wait_on_page_locked_killable() was interrupted then this page is most likely is not PageUptodate() and in this case do_generic_file_read() will fail after lock_page_killable(). See also commit ebded02788b5 ("mm: filemap: avoid unnecessary calls to lock_page when waiting for IO to complete during a read") [[email protected]: changelog addition] Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Bart Van Assche <[email protected]> Reviewed-by: Jan Kara <[email protected]> Acked-by: Oleg Nesterov <[email protected]> Acked-by: Michal Hocko <[email protected]> Cc: Mel Gorman <[email protected]> Cc: Hugh Dickins <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
-rw-r--r--mm/filemap.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/mm/filemap.c b/mm/filemap.c
index 68f1813fbdc3..1b05f75aea0f 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -1721,7 +1721,9 @@ find_page:
* wait_on_page_locked is used to avoid unnecessarily
* serialisations and why it's safe.
*/
- wait_on_page_locked_killable(page);
+ error = wait_on_page_locked_killable(page);
+ if (unlikely(error))
+ goto readpage_error;
if (PageUptodate(page))
goto page_ok;