]> git.baikalelectronics.ru Git - kernel.git/commitdiff
btrfs: Change the hole range to a more accurate value.
authorQu Wenruo <quwenruo@cn.fujitsu.com>
Tue, 15 Apr 2014 02:41:00 +0000 (10:41 +0800)
committerChris Mason <clm@fb.com>
Thu, 24 Apr 2014 23:43:32 +0000 (16:43 -0700)
Commit fc275055ccce7f9774ad9ee1a9c0744ab33ead04 fixed the btrfs expanding
write problem but the hole punched is sometimes too large for some
iovec, which has unmapped data ranges.
This patch will change to hole range to a more accurate value using the
counts checked by the write check routines.

Reported-by: Al Viro <viro@ZenIV.linux.org.uk>
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/file.c

index 23f6a9d9f10412acc6f623f5c4bae7a612184381..e7e78fa9085efa2884a0bdf84dd54ef79979340c 100644 (file)
@@ -1783,7 +1783,7 @@ static ssize_t btrfs_file_aio_write(struct kiocb *iocb,
        start_pos = round_down(pos, root->sectorsize);
        if (start_pos > i_size_read(inode)) {
                /* Expand hole size to cover write data, preventing empty gap */
-               end_pos = round_up(pos + iov->iov_len, root->sectorsize);
+               end_pos = round_up(pos + count, root->sectorsize);
                err = btrfs_cont_expand(inode, i_size_read(inode), end_pos);
                if (err) {
                        mutex_unlock(&inode->i_mutex);