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