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

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

generic_file_direct_write(): switch to iov_iter



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent e7c24607
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -1669,15 +1669,13 @@ static ssize_t __btrfs_direct_write(struct kiocb *iocb,
	loff_t endbyte;
	int err;

	written = generic_file_direct_write(iocb, iov, &nr_segs, pos,
					    count, ocount);
	iov_iter_init(&i, iov, nr_segs, count, 0);
	written = generic_file_direct_write(iocb, &i, pos, count, ocount);

	if (written < 0 || written == count)
		return written;

	pos += written;
	count -= written;
	iov_iter_init(&i, iov, nr_segs, count, written);
	written_buffered = __btrfs_buffered_write(file, &i, pos);
	if (written_buffered < 0) {
		err = written_buffered;
+2 −4
Original line number Diff line number Diff line
@@ -1235,15 +1235,13 @@ static ssize_t fuse_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
		goto out;

	if (file->f_flags & O_DIRECT) {
		written = generic_file_direct_write(iocb, iov, &nr_segs, pos, 
						    count, ocount);
		iov_iter_init(&i, iov, nr_segs, count, 0);
		written = generic_file_direct_write(iocb, &i, pos, count, ocount);
		if (written < 0 || written == count)
			goto out;

		pos += written;
		count -= written;

		iov_iter_init(&i, iov, nr_segs, count, written);
		written_buffered = fuse_perform_write(file, mapping, &i, pos);
		if (written_buffered < 0) {
			err = written_buffered;
+3 −3
Original line number Diff line number Diff line
@@ -2251,6 +2251,7 @@ static ssize_t ocfs2_file_aio_write(struct kiocb *iocb,
	int full_coherency = !(osb->s_mount_opt &
			       OCFS2_MOUNT_COHERENCY_BUFFERED);
	int unaligned_dio = 0;
	struct iov_iter from;

	trace_ocfs2_file_aio_write(inode, file, file->f_path.dentry,
		(unsigned long long)OCFS2_I(inode)->ip_blkno,
@@ -2365,16 +2366,15 @@ relock:
	if (ret)
		goto out_dio;

	iov_iter_init(&from, iov, nr_segs, count, 0);
	if (direct_io) {
		written = generic_file_direct_write(iocb, iov, &nr_segs, *ppos,
		written = generic_file_direct_write(iocb, &from, *ppos,
						    count, ocount);
		if (written < 0) {
			ret = written;
			goto out_dio;
		}
	} else {
		struct iov_iter from;
		iov_iter_init(&from, iov, nr_segs, count, 0);
		current->backing_dev_info = file->f_mapping->backing_dev_info;
		written = generic_perform_write(file, &from, *ppos);
		if (likely(written >= 0))
+3 −2
Original line number Diff line number Diff line
@@ -641,6 +641,7 @@ xfs_file_dio_aio_write(
	int			iolock;
	struct xfs_buftarg	*target = XFS_IS_REALTIME_INODE(ip) ?
					mp->m_rtdev_targp : mp->m_ddev_targp;
	struct iov_iter		from;

	/* DIO must be aligned to device logical sector size */
	if ((pos | count) & target->bt_logical_sectormask)
@@ -698,8 +699,8 @@ xfs_file_dio_aio_write(
	}

	trace_xfs_file_direct_write(ip, count, iocb->ki_pos, 0);
	ret = generic_file_direct_write(iocb, iovp,
			&nr_segs, pos, count, ocount);
	iov_iter_init(&from, iovp, nr_segs, count, 0);
	ret = generic_file_direct_write(iocb, &from, pos, count, ocount);

out:
	xfs_rw_iunlock(ip, iolock);
+2 −2
Original line number Diff line number Diff line
@@ -2407,8 +2407,8 @@ int generic_write_checks(struct file *file, loff_t *pos, size_t *count, int isbl
extern ssize_t generic_file_aio_read(struct kiocb *, const struct iovec *, unsigned long, loff_t);
extern ssize_t __generic_file_aio_write(struct kiocb *, const struct iovec *, unsigned long);
extern ssize_t generic_file_aio_write(struct kiocb *, const struct iovec *, unsigned long, loff_t);
extern ssize_t generic_file_direct_write(struct kiocb *, const struct iovec *,
		unsigned long *, loff_t, size_t, size_t);
extern ssize_t generic_file_direct_write(struct kiocb *, struct iov_iter *,
		loff_t, size_t, size_t);
extern ssize_t generic_perform_write(struct file *, struct iov_iter *, loff_t);
extern ssize_t do_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos);
extern ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos);
Loading