diff options
Diffstat (limited to 'fs/btrfs/file.c')
-rw-r--r-- | fs/btrfs/file.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index c660527af838..c5998477fe60 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c | |||
@@ -1727,6 +1727,7 @@ static ssize_t btrfs_file_aio_write(struct kiocb *iocb, | |||
1727 | struct btrfs_root *root = BTRFS_I(inode)->root; | 1727 | struct btrfs_root *root = BTRFS_I(inode)->root; |
1728 | loff_t *ppos = &iocb->ki_pos; | 1728 | loff_t *ppos = &iocb->ki_pos; |
1729 | u64 start_pos; | 1729 | u64 start_pos; |
1730 | u64 end_pos; | ||
1730 | ssize_t num_written = 0; | 1731 | ssize_t num_written = 0; |
1731 | ssize_t err = 0; | 1732 | ssize_t err = 0; |
1732 | size_t count, ocount; | 1733 | size_t count, ocount; |
@@ -1781,7 +1782,9 @@ static ssize_t btrfs_file_aio_write(struct kiocb *iocb, | |||
1781 | 1782 | ||
1782 | start_pos = round_down(pos, root->sectorsize); | 1783 | start_pos = round_down(pos, root->sectorsize); |
1783 | if (start_pos > i_size_read(inode)) { | 1784 | if (start_pos > i_size_read(inode)) { |
1784 | err = btrfs_cont_expand(inode, i_size_read(inode), start_pos); | 1785 | /* Expand hole size to cover write data, preventing empty gap */ |
1786 | end_pos = round_up(pos + iov->iov_len, root->sectorsize); | ||
1787 | err = btrfs_cont_expand(inode, i_size_read(inode), end_pos); | ||
1785 | if (err) { | 1788 | if (err) { |
1786 | mutex_unlock(&inode->i_mutex); | 1789 | mutex_unlock(&inode->i_mutex); |
1787 | goto out; | 1790 | goto out; |