Commit 3ef045c3 authored by Al Viro's avatar Al Viro

ocfs2: switch to ->write_iter()

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent bf97f3bc
...@@ -2233,15 +2233,13 @@ static int ocfs2_prepare_inode_for_write(struct file *file, ...@@ -2233,15 +2233,13 @@ static int ocfs2_prepare_inode_for_write(struct file *file,
return ret; return ret;
} }
static ssize_t ocfs2_file_aio_write(struct kiocb *iocb, static ssize_t ocfs2_file_write_iter(struct kiocb *iocb,
const struct iovec *iov, struct iov_iter *from)
unsigned long nr_segs,
loff_t pos)
{ {
int ret, direct_io, appending, rw_level, have_alloc_sem = 0; int ret, direct_io, appending, rw_level, have_alloc_sem = 0;
int can_do_direct, has_refcount = 0; int can_do_direct, has_refcount = 0;
ssize_t written = 0; ssize_t written = 0;
size_t count; /* after file limit checks */ size_t count = iov_iter_count(from);
loff_t old_size, *ppos = &iocb->ki_pos; loff_t old_size, *ppos = &iocb->ki_pos;
u32 old_clusters; u32 old_clusters;
struct file *file = iocb->ki_filp; struct file *file = iocb->ki_filp;
...@@ -2250,16 +2248,12 @@ static ssize_t ocfs2_file_aio_write(struct kiocb *iocb, ...@@ -2250,16 +2248,12 @@ static ssize_t ocfs2_file_aio_write(struct kiocb *iocb,
int full_coherency = !(osb->s_mount_opt & int full_coherency = !(osb->s_mount_opt &
OCFS2_MOUNT_COHERENCY_BUFFERED); OCFS2_MOUNT_COHERENCY_BUFFERED);
int unaligned_dio = 0; int unaligned_dio = 0;
struct iov_iter from;
count = iov_length(iov, nr_segs);
iov_iter_init(&from, WRITE, iov, nr_segs, count);
trace_ocfs2_file_aio_write(inode, file, file->f_path.dentry, trace_ocfs2_file_aio_write(inode, file, file->f_path.dentry,
(unsigned long long)OCFS2_I(inode)->ip_blkno, (unsigned long long)OCFS2_I(inode)->ip_blkno,
file->f_path.dentry->d_name.len, file->f_path.dentry->d_name.len,
file->f_path.dentry->d_name.name, file->f_path.dentry->d_name.name,
(unsigned int)nr_segs); (unsigned int)from->nr_segs); /* GRRRRR */
if (iocb->ki_nbytes == 0) if (iocb->ki_nbytes == 0)
return 0; return 0;
...@@ -2362,16 +2356,16 @@ static ssize_t ocfs2_file_aio_write(struct kiocb *iocb, ...@@ -2362,16 +2356,16 @@ static ssize_t ocfs2_file_aio_write(struct kiocb *iocb,
if (ret) if (ret)
goto out_dio; goto out_dio;
iov_iter_truncate(&from, count); iov_iter_truncate(from, count);
if (direct_io) { if (direct_io) {
written = generic_file_direct_write(iocb, &from, *ppos); written = generic_file_direct_write(iocb, from, *ppos);
if (written < 0) { if (written < 0) {
ret = written; ret = written;
goto out_dio; goto out_dio;
} }
} else { } else {
current->backing_dev_info = file->f_mapping->backing_dev_info; current->backing_dev_info = file->f_mapping->backing_dev_info;
written = generic_perform_write(file, &from, *ppos); written = generic_perform_write(file, from, *ppos);
if (likely(written >= 0)) if (likely(written >= 0))
iocb->ki_pos = *ppos + written; iocb->ki_pos = *ppos + written;
current->backing_dev_info = NULL; current->backing_dev_info = NULL;
...@@ -2606,7 +2600,7 @@ static ssize_t ocfs2_file_read_iter(struct kiocb *iocb, ...@@ -2606,7 +2600,7 @@ static ssize_t ocfs2_file_read_iter(struct kiocb *iocb,
/* buffered aio wouldn't have proper lock coverage today */ /* buffered aio wouldn't have proper lock coverage today */
BUG_ON(ret == -EIOCBQUEUED && !(filp->f_flags & O_DIRECT)); BUG_ON(ret == -EIOCBQUEUED && !(filp->f_flags & O_DIRECT));
/* see ocfs2_file_aio_write */ /* see ocfs2_file_write_iter */
if (ret == -EIOCBQUEUED || !ocfs2_iocb_is_rw_locked(iocb)) { if (ret == -EIOCBQUEUED || !ocfs2_iocb_is_rw_locked(iocb)) {
rw_level = -1; rw_level = -1;
have_alloc_sem = 0; have_alloc_sem = 0;
...@@ -2700,13 +2694,13 @@ const struct inode_operations ocfs2_special_file_iops = { ...@@ -2700,13 +2694,13 @@ const struct inode_operations ocfs2_special_file_iops = {
const struct file_operations ocfs2_fops = { const struct file_operations ocfs2_fops = {
.llseek = ocfs2_file_llseek, .llseek = ocfs2_file_llseek,
.read = new_sync_read, .read = new_sync_read,
.write = do_sync_write, .write = new_sync_write,
.mmap = ocfs2_mmap, .mmap = ocfs2_mmap,
.fsync = ocfs2_sync_file, .fsync = ocfs2_sync_file,
.release = ocfs2_file_release, .release = ocfs2_file_release,
.open = ocfs2_file_open, .open = ocfs2_file_open,
.read_iter = ocfs2_file_read_iter, .read_iter = ocfs2_file_read_iter,
.aio_write = ocfs2_file_aio_write, .write_iter = ocfs2_file_write_iter,
.unlocked_ioctl = ocfs2_ioctl, .unlocked_ioctl = ocfs2_ioctl,
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
.compat_ioctl = ocfs2_compat_ioctl, .compat_ioctl = ocfs2_compat_ioctl,
...@@ -2748,13 +2742,13 @@ const struct file_operations ocfs2_dops = { ...@@ -2748,13 +2742,13 @@ const struct file_operations ocfs2_dops = {
const struct file_operations ocfs2_fops_no_plocks = { const struct file_operations ocfs2_fops_no_plocks = {
.llseek = ocfs2_file_llseek, .llseek = ocfs2_file_llseek,
.read = new_sync_read, .read = new_sync_read,
.write = do_sync_write, .write = new_sync_write,
.mmap = ocfs2_mmap, .mmap = ocfs2_mmap,
.fsync = ocfs2_sync_file, .fsync = ocfs2_sync_file,
.release = ocfs2_file_release, .release = ocfs2_file_release,
.open = ocfs2_file_open, .open = ocfs2_file_open,
.read_iter = ocfs2_file_read_iter, .read_iter = ocfs2_file_read_iter,
.aio_write = ocfs2_file_aio_write, .write_iter = ocfs2_file_write_iter,
.unlocked_ioctl = ocfs2_ioctl, .unlocked_ioctl = ocfs2_ioctl,
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
.compat_ioctl = ocfs2_compat_ioctl, .compat_ioctl = ocfs2_compat_ioctl,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment