Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ca39d651 authored by Jens Axboe's avatar Jens Axboe
Browse files

splice: handle try_to_release_page() failure



splice currently assumes that try_to_release_page() always suceeds,
but it can return failure. If it does, we cannot steal the page.

Acked-by: default avatarMingming Cao <cmm@us.ibm.com>
Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent a82c53a0
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -58,8 +58,8 @@ static int page_cache_pipe_buf_steal(struct pipe_inode_info *pipe,
		 */
		wait_on_page_writeback(page);

		if (PagePrivate(page))
			try_to_release_page(page, GFP_KERNEL);
		if (PagePrivate(page) && !try_to_release_page(page, GFP_KERNEL))
			goto out_unlock;

		/*
		 * If we succeeded in removing the mapping, set LRU flag
@@ -75,6 +75,7 @@ static int page_cache_pipe_buf_steal(struct pipe_inode_info *pipe,
	 * Raced with truncate or failed to remove page from current
	 * address space, unlock and return failure.
	 */
out_unlock:
	unlock_page(page);
	return 1;
}