aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/splice.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/fs/splice.c b/fs/splice.c
index 7c2abd4504d7..b5fb2f3e3ac6 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -52,6 +52,15 @@ static int page_cache_pipe_buf_steal(struct pipe_inode_info *info,
52 WARN_ON(!PageLocked(page)); 52 WARN_ON(!PageLocked(page));
53 WARN_ON(!PageUptodate(page)); 53 WARN_ON(!PageUptodate(page));
54 54
55 /*
56 * At least for ext2 with nobh option, we need to wait on writeback
57 * completing on this page, since we'll remove it from the pagecache.
58 * Otherwise truncate wont wait on the page, allowing the disk
59 * blocks to be reused by someone else before we actually wrote our
60 * data to them. fs corruption ensues.
61 */
62 wait_on_page_writeback(page);
63
55 if (PagePrivate(page)) 64 if (PagePrivate(page))
56 try_to_release_page(page, mapping_gfp_mask(mapping)); 65 try_to_release_page(page, mapping_gfp_mask(mapping));
57 66