Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b30ac0fc authored by Al Viro's avatar Al Viro
Browse files

btrfs: switch to ->write_iter()



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 3ef045c3
Loading
Loading
Loading
Loading
+10 −14
Original line number Diff line number Diff line
@@ -447,7 +447,7 @@ static noinline int btrfs_copy_from_user(loff_t pos, int num_pages,
		write_bytes -= copied;
		total_copied += copied;

		/* Return to btrfs_file_aio_write to fault page */
		/* Return to btrfs_file_write_iter to fault page */
		if (unlikely(copied == 0))
			break;

@@ -1708,9 +1708,8 @@ static void update_time_for_write(struct inode *inode)
		inode_inc_iversion(inode);
}

static ssize_t btrfs_file_aio_write(struct kiocb *iocb,
				    const struct iovec *iov,
				    unsigned long nr_segs, loff_t pos)
static ssize_t btrfs_file_write_iter(struct kiocb *iocb,
				    struct iov_iter *from)
{
	struct file *file = iocb->ki_filp;
	struct inode *inode = file_inode(file);
@@ -1719,15 +1718,12 @@ static ssize_t btrfs_file_aio_write(struct kiocb *iocb,
	u64 end_pos;
	ssize_t num_written = 0;
	ssize_t err = 0;
	size_t count;
	size_t count = iov_iter_count(from);
	bool sync = (file->f_flags & O_DSYNC) || IS_SYNC(file->f_mapping->host);
	struct iov_iter i;
	loff_t pos = iocb->ki_pos;

	mutex_lock(&inode->i_mutex);

	count = iov_length(iov, nr_segs);
	iov_iter_init(&i, WRITE, iov, nr_segs, count);

	current->backing_dev_info = inode->i_mapping->backing_dev_info;
	err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode));
	if (err) {
@@ -1740,7 +1736,7 @@ static ssize_t btrfs_file_aio_write(struct kiocb *iocb,
		goto out;
	}

	iov_iter_truncate(&i, count);
	iov_iter_truncate(from, count);

	err = file_remove_suid(file);
	if (err) {
@@ -1783,9 +1779,9 @@ static ssize_t btrfs_file_aio_write(struct kiocb *iocb,
		atomic_inc(&BTRFS_I(inode)->sync_writers);

	if (unlikely(file->f_flags & O_DIRECT)) {
		num_written = __btrfs_direct_write(iocb, &i, pos);
		num_written = __btrfs_direct_write(iocb, from, pos);
	} else {
		num_written = __btrfs_buffered_write(file, &i, pos);
		num_written = __btrfs_buffered_write(file, from, pos);
		if (num_written > 0)
			iocb->ki_pos = pos + num_written;
	}
@@ -2623,10 +2619,10 @@ out:
const struct file_operations btrfs_file_operations = {
	.llseek		= btrfs_file_llseek,
	.read		= new_sync_read,
	.write		= do_sync_write,
	.write		= new_sync_write,
	.read_iter      = generic_file_read_iter,
	.splice_read	= generic_file_splice_read,
	.aio_write	= btrfs_file_aio_write,
	.write_iter	= btrfs_file_write_iter,
	.mmap		= btrfs_file_mmap,
	.open		= generic_file_open,
	.release	= btrfs_release_file,