aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/file.c')
-rw-r--r--fs/btrfs/file.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index a18ceabd99a8..f5a868ab60f3 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -1692,8 +1692,18 @@ static ssize_t __btrfs_direct_write(struct kiocb *iocb,
1692 err = written_buffered; 1692 err = written_buffered;
1693 goto out; 1693 goto out;
1694 } 1694 }
1695 /*
1696 * Ensure all data is persisted. We want the next direct IO read to be
1697 * able to read what was just written.
1698 */
1695 endbyte = pos + written_buffered - 1; 1699 endbyte = pos + written_buffered - 1;
1696 err = filemap_write_and_wait_range(file->f_mapping, pos, endbyte); 1700 err = filemap_fdatawrite_range(file->f_mapping, pos, endbyte);
1701 if (!err && test_bit(BTRFS_INODE_HAS_ASYNC_EXTENT,
1702 &BTRFS_I(file_inode(file))->runtime_flags))
1703 err = filemap_fdatawrite_range(file->f_mapping, pos, endbyte);
1704 if (err)
1705 goto out;
1706 err = filemap_fdatawait_range(file->f_mapping, pos, endbyte);
1697 if (err) 1707 if (err)
1698 goto out; 1708 goto out;
1699 written += written_buffered; 1709 written += written_buffered;