Skip to content

Commit 5e8b9ef

Browse files
goldwynrkdave
authored andcommitted
btrfs: move pos increment and pagecache extension to btrfs_buffered_write
While we do this, correct the call to pagecache_isize_extended: - pagecache_isize_extended needs to be called to the start of the write as opposed to i_size - we don't need to check range before the call, this is done in the function Reviewed-by: Christoph Hellwig <[email protected]> Reviewed-by: Josef Bacik <[email protected]> Signed-off-by: Goldwyn Rodrigues <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
1 parent 4e4cabe commit 5e8b9ef

File tree

1 file changed

+5
-8
lines changed

1 file changed

+5
-8
lines changed

fs/btrfs/file.c

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1581,6 +1581,7 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb,
15811581
int ret = 0;
15821582
bool only_release_metadata = false;
15831583
bool force_page_uptodate = false;
1584+
loff_t old_isize = i_size_read(inode);
15841585

15851586
nrptrs = min(DIV_ROUND_UP(iov_iter_count(i), PAGE_SIZE),
15861587
PAGE_SIZE / (sizeof(struct page *)));
@@ -1779,6 +1780,10 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb,
17791780
}
17801781

17811782
extent_changeset_free(data_reserved);
1783+
if (num_written > 0) {
1784+
pagecache_isize_extended(inode, old_isize, iocb->ki_pos);
1785+
iocb->ki_pos += num_written;
1786+
}
17821787
return num_written ? num_written : ret;
17831788
}
17841789

@@ -1901,7 +1906,6 @@ static ssize_t btrfs_file_write_iter(struct kiocb *iocb,
19011906
loff_t pos;
19021907
size_t count;
19031908
loff_t oldsize;
1904-
int clean_page = 0;
19051909

19061910
if (!(iocb->ki_flags & IOCB_DIRECT) &&
19071911
(iocb->ki_flags & IOCB_NOWAIT))
@@ -1983,8 +1987,6 @@ static ssize_t btrfs_file_write_iter(struct kiocb *iocb,
19831987
inode_unlock(inode);
19841988
goto out;
19851989
}
1986-
if (start_pos > round_up(oldsize, fs_info->sectorsize))
1987-
clean_page = 1;
19881990
}
19891991

19901992
if (sync)
@@ -2027,11 +2029,6 @@ static ssize_t btrfs_file_write_iter(struct kiocb *iocb,
20272029
current->journal_info = NULL;
20282030
} else {
20292031
num_written = btrfs_buffered_write(iocb, from);
2030-
if (num_written > 0)
2031-
iocb->ki_pos = pos + num_written;
2032-
if (clean_page)
2033-
pagecache_isize_extended(inode, oldsize,
2034-
i_size_read(inode));
20352032
}
20362033

20372034
inode_unlock(inode);

0 commit comments

Comments
 (0)