|
@@ -58,8 +58,8 @@ static int page_cache_pipe_buf_steal(struct pipe_inode_info *pipe,
|
|
*/
|
|
*/
|
|
wait_on_page_writeback(page);
|
|
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
|
|
* 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
|
|
* Raced with truncate or failed to remove page from current
|
|
* address space, unlock and return failure.
|
|
* address space, unlock and return failure.
|
|
*/
|
|
*/
|
|
|
|
+out_unlock:
|
|
unlock_page(page);
|
|
unlock_page(page);
|
|
return 1;
|
|
return 1;
|
|
}
|
|
}
|