Skip to content

Commit

Permalink
splice: handle try_to_release_page() failure
Browse files Browse the repository at this point in the history
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: Mingming Cao <cmm@us.ibm.com
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
  • Loading branch information
Jens Axboe committed May 28, 2008
1 parent a82c53a commit ca39d65
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions fs/splice.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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;
}
Expand Down

0 comments on commit ca39d65

Please sign in to comment.