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.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 8d7b5a45c005..ea9f10bb089c 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -1703,18 +1703,17 @@ again:
1703 return num_written ? num_written : ret; 1703 return num_written ? num_written : ret;
1704} 1704}
1705 1705
1706static ssize_t __btrfs_direct_write(struct kiocb *iocb, 1706static ssize_t __btrfs_direct_write(struct kiocb *iocb, struct iov_iter *from)
1707 struct iov_iter *from,
1708 loff_t pos)
1709{ 1707{
1710 struct file *file = iocb->ki_filp; 1708 struct file *file = iocb->ki_filp;
1711 struct inode *inode = file_inode(file); 1709 struct inode *inode = file_inode(file);
1710 loff_t pos = iocb->ki_pos;
1712 ssize_t written; 1711 ssize_t written;
1713 ssize_t written_buffered; 1712 ssize_t written_buffered;
1714 loff_t endbyte; 1713 loff_t endbyte;
1715 int err; 1714 int err;
1716 1715
1717 written = generic_file_direct_write(iocb, from, pos); 1716 written = generic_file_direct_write(iocb, from);
1718 1717
1719 if (written < 0 || !iov_iter_count(from)) 1718 if (written < 0 || !iov_iter_count(from))
1720 return written; 1719 return written;
@@ -1832,7 +1831,7 @@ static ssize_t btrfs_file_write_iter(struct kiocb *iocb,
1832 atomic_inc(&BTRFS_I(inode)->sync_writers); 1831 atomic_inc(&BTRFS_I(inode)->sync_writers);
1833 1832
1834 if (iocb->ki_flags & IOCB_DIRECT) { 1833 if (iocb->ki_flags & IOCB_DIRECT) {
1835 num_written = __btrfs_direct_write(iocb, from, pos); 1834 num_written = __btrfs_direct_write(iocb, from);
1836 } else { 1835 } else {
1837 num_written = __btrfs_buffered_write(file, from, pos); 1836 num_written = __btrfs_buffered_write(file, from, pos);
1838 if (num_written > 0) 1837 if (num_written > 0)
@@ -1852,11 +1851,8 @@ static ssize_t btrfs_file_write_iter(struct kiocb *iocb,
1852 spin_lock(&BTRFS_I(inode)->lock); 1851 spin_lock(&BTRFS_I(inode)->lock);
1853 BTRFS_I(inode)->last_sub_trans = root->log_transid; 1852 BTRFS_I(inode)->last_sub_trans = root->log_transid;
1854 spin_unlock(&BTRFS_I(inode)->lock); 1853 spin_unlock(&BTRFS_I(inode)->lock);
1855 if (num_written > 0) { 1854 if (num_written > 0)
1856 err = generic_write_sync(file, pos, num_written); 1855 num_written = generic_write_sync(iocb, num_written);
1857 if (err < 0)
1858 num_written = err;
1859 }
1860 1856
1861 if (sync) 1857 if (sync)
1862 atomic_dec(&BTRFS_I(inode)->sync_writers); 1858 atomic_dec(&BTRFS_I(inode)->sync_writers);